linux - 找到 PATTERN 时合并两个文本文件的行

标签 linux shell awk sed tcsh

我正在寻找一个 awk 或 sed 解决方案来根据匹配的模式组合 2 个文件,如下所示:本例中的模式是“cat”。文件 2 中的行数始终等于文件 1 中的模式匹配数。

文件1:

I am a cat  
I am a dog    
I am a dog  
I am a cat  
I am a dog

文件2:

line 1  
line 2

合并文件:

I am a cat  
line 1  
I am a dog  
I am a dog  
I am a cat  
line 2  
I am a dog

最佳答案

NR==FNR 构造非常方便,但如果您要加载到内存中的文件非常非常大,则可能存在风险。

相反,awk 可以同时读取两个文件。

$ awk '1; /cat/{getline this<"file2";print this}' file1
I am a cat
line1
I am a dog
I am a dog
I am a cat
line2
I am a dog

程序开头的 1 打印 file1 中的当前行,无论它是什么。脚本中的第二个条件检查您的魔术词,然后从 file2 读取并打印它。您的内存占用量仍然很小,因为您没有使用其中一个文件的内容填充数组。

关于linux - 找到 PATTERN 时合并两个文本文件的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38621535/

相关文章:

c - 如何将 char* 转换为 UTF-8 编码的 char*?

linux - 更改正在运行的进程的环境变量

c++ - 我可以设置一个由 gdb 启动和附加的 linux 程序吗?

linux - Debian Linux 脚本。重启MongoDB

正则表达式比较多个文件中的字符串

linux - 如何在多台主机上同时运行远程脚本

shell - 如何从 shell 中获取 Erlang 的发行版本号?

linux - 如何使用 GhostScript 避免标题截断 tiff。选择 于 tiff

awk - 仅在第一次出现后在模式匹配后追加一行

使用awk将一个文件中的列替换为另一个文件中的列?