如何交错两个文本文件的行

交错两个(或更多)文本文件的行最简单/最快捷的方法是什么? 例:

文件1:

line1.1 line1.2 line1.3 

文件2:

 line2.1 line2.2 line2.3 

交错的:

 line1.1 line2.1 line1.2 line2.2 line1.3 line2.3 

当然,编写一个小Perl脚本很容易,可以打开它们并执行任务。 但是我想知道是否有可能用更less的代码逃脱,也许使用Unix工具的单线程?

 paste -d '\n' file1 file2 

这是一个使用awk的解决scheme:

 awk '{print; if(getline < "file2") print}' file1 

产生这个输出:

 line 1 from file1 line 1 from file2 line 2 from file1 line 2 from file2 ...etc 

如果你想在输出中添加一些额外的格式,使用awk会很有用,例如,如果你想根据来自哪个文件来标记每一行:

 awk '{print "1: "$0; if(getline < "file2") print "2: "$0}' file1 

产生这个输出:

 1: line 1 from file1 2: line 1 from file2 1: line 2 from file1 2: line 2 from file2 ...etc 

注:此代码假定file1的长度大于或等于file2。

如果file1包含比file2更多的行,并且要在file2完成后输出空白行,请在getlinetesting中添加else子句:

 awk '{print; if(getline < "file2") print; else print ""}' file1 

要么

 awk '{print "1: "$0; if(getline < "file2") print "2: "$0; else print"2: "}' file1 

这里有一个GUI方法:将它们粘贴到电子表格的两列中,将所有单元格复制出来,然后使用正则expression式将换行符replace为换行符。

@ Sujoy的回答指向一个有用的方向。 您可以添加行号,sorting和去除行号:

 (cat -n file1 ; cat -n file2 ) | sort -n | cut -f2- 

请注意(我感兴趣),如果不使用静态文件,而是使用可能运行速度较慢或比另一个更快的命令输出,则需要更多的工作来获得sorting权。 在这种情况下,除了行号外,还需要添加/sorting/删除另一个标签:

 (cat -n <(command1...) | sed 's/^/1\t/' ; cat -n <(command2...) | sed 's/^/2\t/' ; cat -n <(command3) | sed 's/^/3\t/' ) \ | sort -n | cut -f2- | sort -n | cut -f2- 
 cat file1 file2 |sort -t. -k 2.1 

这里指定分隔符是“。” 而且我们正在sorting第二个字段的第一个字符。