我有一个文件file1.txt,如下所示:
line 1 file 1
line 2 file 1
line 3 file 1
line 4 file 1
第二个文件file2.txt如下所示:
line 1 file 2
line 2 file 2
line 3 file 2
line 4 file 2
line 5 file 2
我想要一行命令(最好使用sed)从第二个文件(file2.txt)获取第2-4行,并将第3行之后的行添加到第一个文件(file1.txt)中。 / p>
所以我的输出应该如下:
line 1 file 1
line 2 file 1
line 3 file 1
line 2 file 2
line 3 file 2
line 4 file 2
line 4 file 1
为了从第二个文件中获取第2-4行,我可以使用:
sed -n '2,4p' file2.txt
为了在文件1中的第3行之后插入行,我可以使用如下:
sed '4i<What to insert here>' file1.txt
但是如何结合这两种操作?
答案 0 :(得分:2)
与其他回答者同意这是awk
的工作,可以使用sed
完成。
sed
命令之外, s
提供了所有类型的奇怪命令,并且GNU sed有一个e
执行命令。在您提出问题的所有部分之后,以下是如何结合您的想法:
sed '4 e sed -n 2,4p file2.txt' file1.txt
答案 1 :(得分:1)
ed
是一个编辑器,可以就地保存文件:
ed file1.txt <<END
3a
$(sed -n 2,4p file2.txt)
.
wq
END
GNU awk可以就地保存:
gawk -i inplace -v text="$(sed -n 2,4p file2.txt)" '1; NR==3 {print text}' file1.txt
答案 2 :(得分:0)
您可以使用awk:
awk 'FNR==NR{if (FNR>=2 && FNR <=4) s=(s==""?$0:s RS $0); next} FNR==4{print s} 1' f2 f1
line 1 file 1
line 2 file 1
line 3 file 1
line 2 file 2
line 3 file 2
line 4 file 2
line 4 file 1
<强>解释强>
NR == FNR { # While processing the 2nd file
if (FNR>=2 && FNR <=4) # for line # 2 to 4
s=(s==""?$0:s RS $0 # store each line in variable s separated by newline
next
}
FNR==4 { # while processing the 1st file if line # is 4
print s # print stored text from variable s
}
1 # default action to print each line from file1
答案 3 :(得分:0)
这是AWK的工作,但是这样的东西可以在bash中使用:
sed '3r '<(sed -n '2,4p;5q' file2) file1