如何合并两个文件作为替代行?

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)

ste*_*ver 7

使用 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)


mur*_*uru 6

您可以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并将它们打印出来,以换行符分隔。