用其他文件的前几行替换前几行

Tom*_*asz 4 linux sed

我正在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)

我应该如何修改输入命令?我尝试了各种组合。

Rav*_*h13 5

以下内容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:在此处使用awkandheadtailcommand的组合。

awk 'FNR==1{system("head -n3 file2.dat");next} 1' <(tail -n +4 file1.dat)
Run Code Online (Sandbox Code Playgroud)