Объединение вывода двух команд в одну строку
У меня есть очень простой сценарий оболочки:
for file in Alt_moabit Book_arrival Door_flowers Leaving_laptop
do
for qp in 10 12 15 19 22 25 32 39 45 60
do
for i in 0 1
do
echo "$file\t$qp\t$i" >> psnr.txt
./command > $file-$qp-psnr.txt 2>> psnr.txt
done
done
done
command
вычисляет некоторые значения PSNR и записывает подробное резюме в файл для каждой комбинации file
, qp
а также i
, Все в порядке.
2>>
выводит одну строку информации, которая мне действительно нужна. Но при исполнении я получаю:
Alt_moabit 10 0
total 47,8221 50,6329 50,1031
Alt_moabit 10 1
total 47,8408 49,9973 49,8197
Alt_moabit 12 0
total 47,0665 50,1457 49,6755
Alt_moabit 12 1
total 47,1193 49,4284 49,3476
Что я хочу, однако, это:
Alt_moabit 10 0 total 47,8221 50,6329 50,1031
Alt_moabit 10 1 total 47,8408 49,9973 49,8197
Alt_moabit 12 0 total 47,0665 50,1457 49,6755
Alt_moabit 12 1 total 47,1193 49,4284 49,3476
Как я могу этого достичь?
(Пожалуйста, не стесняйтесь сменить название, если считаете, что оно более подходящее)
6 ответов
Утилита echo (версия GNU) имеет опцию -n, чтобы пропустить завершающий перевод строки. Используйте это в своем первом эхо. Вам, вероятно, придется поставить некоторое место после первой строки или перед второй для удобства чтения.
Вы могли бы передать -n
вариант вашего первого echo
команда, поэтому он не выводит символ новой строки.
В качестве быстрой демонстрации это:
echo "test : " ; echo "blah"
получит вас:
test :
blah
С новой строкой между двумя выходами.
Хотя это, с -n
для первого echo
:
echo -n "test : " ; echo "blah"
вы получите следующий вывод:
test : blah
Без какой-либо новой строки между двумя выходными.
Ты можешь использовать printf
вместо echo
, что лучше по причинам портативности.
printf - это правильный способ решения вашей проблемы (+1 куруми), но для полноты вы также можете сделать:
echo "$ file \ t $ qp \ t $ i $ (./command 2> & 1> $ file- $ qp-psnr.txt)" >> psnr.txt
Я также столкнулся с той же проблемой. Чтобы определить мою проблему, у меня есть скрипт, который использует функцию эха следующим образом:
echo -n "Some text here"
echo -n "Some text here"
Результат, который я получил, выглядит следующим образом:
-n Some text here
-n Some text here
и я хочу, чтобы текст был в одной строке, и он также печатает опцию -n на выходе.
Примечание. - Согласно справочной странице, опция -n не печатает завершающий символ новой строки.
То, как я решил это, добавив шебанг в начало файла сценария, подобное этому.
#!/bin/bash
echo -n "Some text here"
echo -n "Some text here"
Это напечатает желаемый результат следующим образом:
Some text here Some text here
Надеюсь это поможет!
В то время как
echo -n
может работать, если вы просто хотите, чтобы вывод выводился на консоль, он не будет работать, если вы хотите, чтобы вывод был перенаправлен в файл.
Если вы хотите, чтобы объединенный вывод был перенаправлен в файл, это сработает:
echo "Str1: `echo "Str2"`" >> file