如何逐行组合两个命令输出?

如何逐行组合两个命令输出?

假设我有这两个命令:

$ cat file1
file1_a
file1_b
file1_c
file1_d

和:

$ cat file2
file2_a
file2_b
file2_c
file2_d

如何使用自定义分隔符(例如...)组合这些输出,以便获得以下输出:

$ # some fancy command like { cat file1 & cat file2 } | combine --separator='...'
file1_a...file2_a
file1_b...file2_b
file1_c...file2_c
file1_d...file2_d

答案1

我喜欢使用paste命令。

paste -d. file1 - - file2 < /dev/null

产生所需的输出

file1_a...file2_a
file1_b...file2_b
file1_c...file2_c
file1_d...file2_d  

-指的是标准输入,我们使用它两次来使我们</dev/null使用的点增加三倍,因为我们不希望这些点之间有任何东西。

答案2

如果您有paste两个文件,它们将由制表符分隔。因此,只需将制表符替换为您想要的分隔符即可:

$ paste file1 file2 | sed -e 's/\t/.../'

如果您的内容有制表符,则发明一个新的分隔符,该分隔符不会像 % 那样出现:

$ paste -d% file1 file2 | sed -e s/%/.../

答案3

这是@zacharybrady 的答案,但更像你所要求的。它就输入过程而言。我想你会延长。

paste -d. <(cat file1) - - <(cat file2) < /dev/null

感谢@zacharybrady 让我坚持了下来。我已经忘记了这join <(cat -n file1) <(cat -n file2) | cut -d" " -f2-一点paste。但我无法获得正确的字段分隔符。

注意:我发现它paste不符合 utf-8 标准。它只处理 后的第一个字节-d,因此-d…被破坏。 (我使用的是debian jessie,粘贴(GNU coreutils)8.23)

相关内容