首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用其他文件中的前几行替换前几行

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

Stack Overflow用户
提问于 2018-01-22 13:01:31
回答 2查看 791关注 0票数 4

我正在做Linux的工作。我有两个文件- file1.dat和file2.dat。

代码语言:javascript
运行
复制
cat file1.dat
1
2
3
4
5
6
7
8
9
10

对于file2:

代码语言:javascript
运行
复制
cat file2.dat
1a
2a
3a
4a
5a
6a
7a
8a
9a
10a

我想将file1.dat中的前4行替换为file2.dat的前3行。所以我的输出将是

代码语言:javascript
运行
复制
cat file1.dat
1a
2a
3a
5
6
7
8
9
10

我尝试了以下输入:

代码语言:javascript
运行
复制
sed -i.bak '1,4d;3r file2.dat' file1.dat

但是有了这个输入,我有以下输出:

代码语言:javascript
运行
复制
5
6
7
8
9
10

如何修改输入命令?我试过各种组合。

EN

回答 2

Stack Overflow用户

发布于 2018-01-22 13:14:29

遵循awk也可以帮助您使用GNU awk中相同的、经过测试的代码。

解决方案1:

代码语言:javascript
运行
复制
awk 'FNR==NR && FNR<4{print;next} FNR>4 && FNR!=NR' file2.dat file1.dat

解决方案2:

代码语言:javascript
运行
复制
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:使用awkheadtail命令的组合。

代码语言:javascript
运行
复制
awk 'FNR==1{system("head -n3 file2.dat");next} 1' <(tail -n +4 file1.dat)
票数 7
EN

Stack Overflow用户

发布于 2018-01-22 13:10:30

假设GNU sed

代码语言:javascript
运行
复制
$ 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

对于少量行,也可以使用

代码语言:javascript
运行
复制
sed -e '3R f2' -e '3R f2' -e '3R f2' -e '1,4d' f1

R命令一次读取一行

使用,这可能对所有/大多数场景都更好。

代码语言:javascript
运行
复制
head -n3 f2; tail -n +5 f1
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48382204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档