我正在做Linux的工作。我有两个文件- 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
我想将file1.dat中的前4行替换为file2.dat的前3行。所以我的输出将是
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
如何修改输入命令?我试过各种组合。
发布于 2018-01-22 13:14:29
遵循awk
也可以帮助您使用GNU awk
中相同的、经过测试的代码。
解决方案1:
awk 'FNR==NR && FNR<4{print;next} FNR>4 && FNR!=NR' file2.dat file1.dat
解决方案2:
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
解决方案3:使用awk
、head
和tail
命令的组合。
awk 'FNR==1{system("head -n3 file2.dat");next} 1' <(tail -n +4 file1.dat)
发布于 2018-01-22 13:10:30
假设GNU sed
$ sed '3q' f2 | sed -e '3r /dev/stdin' -e '1,4d' f1
1a
2a
3a
5
6
7
8
9
10
sed '3q' f2
给出了第二个文件的前三行-e '3r /dev/stdin'
使用stdin数据-e '1,4d'
删除所需行r
,然后是d
对于少量行,也可以使用
sed -e '3R f2' -e '3R f2' -e '3R f2' -e '1,4d' f1
R
命令一次读取一行
使用,这可能对所有/大多数场景都更好。
head -n3 f2; tail -n +5 f1
https://stackoverflow.com/questions/48382204
复制相似问题