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
之间的原始行现已被文件中的行替换。mode
tot
2.dat