使用 awk 命令在特殊行之间复制和粘贴

使用 awk 命令在特殊行之间复制和粘贴

awk我在这个命令中遇到了问题

awk 'NR==1,/mode/{next}/tot/,NR==0{next}{print}' 1.out > 2.dat

从文件 1 的内容中,我将行放在文件 2 中以该单词开头的行mode和以该单词开头的行之间。tot

现在我想将从文件 1 复制的数据放入另一个文件(如文件 3,该文件已存在且包含内容)中,放在以特定单词mode和开头的行之间tot。有人能帮帮我吗?

答案1

假设给定的awk命令

awk 'NR==1,/mode/{next}/tot/,NR==0{next}{print}' 1.out > 2.dat

已执行,并创建文件2.dat

为了根据要求修改现有文件,这里使用一个命令(创建临时文件)3.out来回答:awk/tmp/3.out.tmpfile

awk 'FNR==1{nf++}; NR==1,/mode/{print;next}; f2==0{f2=1;nextfile}; nf==2{print;next}; /tot/,0{print}' 3.out 2.dat 3.out > /tmp/3.out.tmpfile

和一个命令(用修改后的文件mv替换原始文件):3.out/tmp/3.out.tmpfile

mv /tmp/3.out.tmpfile 3.out

例如,如果原始3.out文件包含:

line-1
line-2
mode
line-X
line-Y
line-Z
tot
line-3
line-4
line-5

并且文件2.dat包含:

inserted-line-A
inserted-line-B
inserted-line-C
inserted-line-D
inserted-line-E

那么上述建议的命令将导致修改后的3.out文件现在包含以下内容:

line-1
line-2
mode
inserted-line-A
inserted-line-B
inserted-line-C
inserted-line-D
inserted-line-E
tot
line-3
line-4
line-5

3.out之间的原始行现已被文件中的行替换。modetot2.dat

相关内容