一尘不染

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

linux

我正在Linux上工作。我有2个文件-file1.dat和file2.dat。

cat file1.dat
1
2
3
4
5
6
7
8
9
10

对于file2:

cat file2.dat
1a
2a
3a
4a
5a
6a
7a
8a
9a
10a

我想用file2.dat的前3行替换file1.dat的前4行。所以我的输出如下

cat file1.dat
1a
2a
3a
5
6
7
8
9
10

我尝试了以下输入:

sed -i.bak '1,4d;3r file2.dat' file1.dat

但是使用此输入,我有以下输出:

5
6
7
8
9
10

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


阅读 225

收藏
2020-06-07

共1个答案

一尘不染

awk 是你的朋友

脚本

# awk 'NR==FNR && FNR<=3 || NR>FNR && FNR>4' file2 file1

输出量

1a
2a
3a
5
6
7
8
9
10

提示

  • NR-已处理的记录总数
  • FNR-处理的记录总数,但在读取新文件时会重置。
  • 当条件评估为true且没有给出任何额外的命令时,awk仅打印。

都好 :-)

2020-06-07