Neg*_*gar 3 merge text-processing
我知道如何合并两个表以在新文件中打印替代行,但我想将 file1.txt 中的每两行与 file2.txt 中的一行合并。举个例子:
file1.txt 是
A a aa
B b bb
C c cc
D d dd
Run Code Online (Sandbox Code Playgroud)
和 file2.txt 是
E e ee
F f ff
Run Code Online (Sandbox Code Playgroud)
我希望有
A a aa
B b bb
E e ee
C c cc
D d dd
F f ff
Run Code Online (Sandbox Code Playgroud)
使用 GNU sed,您可以在第一个文件的每隔一行(“两个跳过两个”)之后读取并插入第二个文件中的一行:
$ sed '2~2R file2.txt' file1.txt
A a aa
B b bb
E e ee
C c cc
D d dd
F f ff
Run Code Online (Sandbox Code Playgroud)
在 awk 中稍微冗长的实现:
awk '{print} !(NR%2) {if ((getline < "file2.txt") > -1) print}' file1.txt
Run Code Online (Sandbox Code Playgroud)
您可以paste为此使用以下命令:
% paste -d '\n' - - file2.txt < file1.txt
A a aa
B b bb
E e ee
C c cc
D d dd
F f ff
Run Code Online (Sandbox Code Playgroud)
paste,默认情况下,从每个输入文件中获取行,然后将它们合并为由制表符分隔的一行。使用-d '\n',我们告诉它使用换行符作为分隔符。-是标准输入,从file1.txt( < file1.txt)重定向进来。所以paste从标准输入中取出一行,然后从标准输入中取出另一行(实际上是两行 from file1.txt,然后一行 fromfile2.txt并将它们打印出来,以换行符分隔。