многострочная замена новыми строками

С помощью 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, если вы не возражаете против запятых-разделителей по умолчанию ).

-2
21.11.2020, 19:47
2 ответа

С 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
0
18.03.2021, 22:48

Предполагая, что file1— это файл, который нужно изменить (, чтобы заменить первые 3 строки блоком из 4 строк ), и вы скопировали 4 новые строки в file2, я бы сделал это:

tail -n +4 file1 >> file2 && mv file2 file1

Это также эффективно в случае большого file1по сравнению с командами редактирования в -месте.

0
18.03.2021, 22:48

Теги

Похожие вопросы