В bash, как объединить вывод двух команд и добавить их в одну и ту же строку файла?
Например, у меня есть две команды здесь:
{ command1 & command2; } >> file1
Например, вывод command1
является 400
и вывод command2
является 4
,
Так вот что я получаю:
400
4
Я хочу, чтобы результаты двух команд добавлялись в одну строку следующим образом:
400 4
2 ответа
Ваша команда в основном такова.
$ (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 для вас, но EOL добавляется командой echo.
$ echo "$(echo '400') $(echo '4')" | hexdump -C
00000000 34 30 30 20 34 0a |400 4.|
00000006
Я бы использовал paste
{ command1 & command2; } | paste -d" " -s >> file1
(обеспокоенность по поводу фоновой команды1 была отмечена)
Демо-версия:
$ { echo 400; echo 4; }
400
4
$ { echo 400; echo 4; } | paste -d" " -s
400 4