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


1

例如,我在这里有两个命令:

{ command1 & command2; } >> file1

例如,输出 command1400,和的输出 command24

所以这就是我得到的:

400
4

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

400 4

你确定你会得到那个输出吗?你把command1放到后台,所以你怎么知道你保证先得到它的输出?
glenn jackman

Answers:


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

我不想回显“400”400只是命令输出的占位符。
Galaxy

1
我知道,用你的命令替换'echo 400'。我以此为例。 Echo只是一个有用的 命令 这会让我快速做出一些例子,这些例子的结果与您在问题中的结果完全一致。
Zoredache

还有: paste <(cmd1) <(cmd2) >> file.txt
Seb B.

1

我用了 paste

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

(关注后台命令1已被注意到)

演示:

$ { echo 400; echo 4; }
400
4
$ { echo 400; echo 4; } | paste -d" " -s
400 4
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.