我正在Linux上工作。我有2个文件-file1.dat和file2.dat。
cat file1.dat
1
2
3
4
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
对于file2:
cat file2.dat
1a
2a
3a
4a
5a
6a
7a
8a
9a
10a
Run Code Online (Sandbox Code Playgroud)
我想用file2.dat的前3行替换file1.dat的前4行。所以我的输出如下
cat file1.dat
1a
2a
3a
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
我尝试了以下输入:
sed -i.bak '1,4d;3r file2.dat' file1.dat
Run Code Online (Sandbox Code Playgroud)
但是使用此输入,我有以下输出:
5
6
7
8
9
10
Run Code Online (Sandbox Code Playgroud)
我应该如何修改输入命令?我尝试了各种组合。
以下内容awk可能还会帮助您使用中经过测试的相同代码GNU awk。
解决方案1:
awk 'FNR==NR && FNR<4{print;next} FNR>4 && FNR!=NR' file2.dat file1.dat
Run Code Online (Sandbox Code Playgroud)
解决方案二:
awk 'FNR==NR && FNR==4{nextfile} FNR==NR{print;next} FNR>4 && FNR!=NR' file2.dat file1.dat
OR
awk 'FNR==NR{if(FNR==4){nextfile};print;next} FNR>4 && FNR!=NR' file2.dat file1.dat
Run Code Online (Sandbox Code Playgroud)
解决方案3rd:在此处使用awkandhead和tailcommand的组合。
awk 'FNR==1{system("head -n3 file2.dat");next} 1' <(tail -n +4 file1.dat)
Run Code Online (Sandbox Code Playgroud)