我正在寻找一个awk或sed解决方案,根据匹配的模式组合2个文件,如下所示:在这种情况下,PATTERN是“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
答案 0 :(得分:3)
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
读取并打印它。您的内存占用空间很小,因为您没有使用其中一个文件的内容填充数组。
答案 1 :(得分:2)
试试这个awk one liner:
awk 'NR==FNR{a[NR]=$0;next}1;/cat/{print a[++i]}' file2 file1
试验:
$ cat file1
I am a cat
I am a dog
I am a dog
I am a cat
I am a dog
$ cat file2
line 1
line 2
$ awk 'NR==FNR{a[NR]=$0;next}1;/cat/{print a[++i]}' file2 file1
I am a cat
line 1
I am a dog
I am a dog
I am a cat
line 2
I am a dog