1

Например, у меня есть две команды здесь:

{ command1 & command2; } >> file1

Например, выходные данные команды 1 command1 400 , а выходные данные команды 2 command2 4 .

Так вот что я получаю:

400
4

Я хочу, чтобы результаты двух команд добавлялись в одну строку следующим образом:

400 4

2 ответа2

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 для вас, но EOL добавляется командой echo.

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

Я бы использовал paste

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

(обеспокоенность по поводу фоновой команды1 была отмечена)

Демо-версия:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .