С помощью GNU Datamash
$ datamash -W groupby 1 collapse 2 < file | sed 's/,/ /g'
Locus7625186 GO0004866 GO0010951 GO0005615 GO0016021
Locus7360093 GO0004712 GO0007093
Locus1507198 GO0044212 GO0045944 GO0005634 GO0036464 GO0046982
(вы можете опустить вертикальную черту через sed, если вы не возражаете против запятых-разделителей по умолчанию ).
С GNU sed:
printf '%s\n' '%nproc=20' '%chk=pes.chk' '%mem=200GB' '#CCSD/6-31G(d) Opt SCF(maxcyc=1000)' |
sed -e '3r/dev/stdin' -e '1,3d' file
или если новые строки находятся в файле с именемlinesfile
:
sed -e '3rlinesfile' -e '1,3d' file
Предполагая, что file1
— это файл, который нужно изменить (, чтобы заменить первые 3 строки блоком из 4 строк ), и вы скопировали 4 новые строки в file2
, я бы сделал это:
tail -n +4 file1 >> file2 && mv file2 file1
Это также эффективно в случае большого file1
по сравнению с командами редактирования в -месте.