例如我这里有两个命令:
{ command1 & command2; } >> file1
例如 的输出command1
是400
, 的输出command2
是4
。
这就是我得到的:
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