在 bash 中,如何合并两个命令的输出并将它们附加到文件的同一行?

在 bash 中,如何合并两个命令的输出并将它们附加到文件的同一行?

例如我这里有两个命令:

{ command1 & command2; } >> file1

例如 的输出command1400, 的输出command24

这就是我得到的:

400
4

我希望将这两个命令的输出附加到相同的像这样:

400 4

答案1

您的命令基本上就是这样。

$ (echo '400'  && echo '4') | hexdump -C
00000000  34 30 30 0a 34 0a                                 |400.4.|
00000006

输出不包括行尾\n(即0a字符)。因此,您可以做的一件简单事情是通过命令将其删除\n

就像这样

$ (echo '400'  && echo '4') | tr '\n' ' ' | hexdump -C
00000000  34 30 30 20 34 20                                 |400 4 |
00000006

它的实际输出为400 4。但其中不包含任何行尾,因此您可能只想从第一个命令中删除行尾。

$ (echo '400' | tr '\n' ' ' && echo '4') | hexdump -C
00000000  34 30 30 20 34 0a                                 |400 4.|
00000006

无论如何,重点是行尾只是一个字符,使用 tr、sed、awk 或您最喜欢的工具来操作字符串。

另一个可行的选择是,根据您的要求,可以执行如下操作。这样,命令的输出会神奇地为您删除 EOL,但 echo 命令会附加 EOL。

$ echo "$(echo '400') $(echo '4')" | hexdump -C
00000000  34 30 30 20 34 0a                                 |400 4.|
00000006

答案2

我会用paste

{ command1 & command2; } | paste -d" " -s >> file1

(已注意到对后台命令 1 的担忧)

演示:

$ { echo 400; echo 4; }
400
4
$ { echo 400; echo 4; } | paste -d" " -s
400 4

相关内容