Ответ 1
У утилиты echo (GNU version) есть опция -n, чтобы опустить конечную новую строку. Используйте это в своем первом эхом. Вероятно, вам придется разместить некоторое пространство после первой строки или до второго для удобства чтения.
У меня есть очень простая оболочка script здесь:
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
Как я могу это достичь?
(Пожалуйста, не стесняйтесь изменять заголовок, если вы считаете, что есть более подходящий)
У утилиты echo (GNU version) есть опция -n, чтобы опустить конечную новую строку. Используйте это в своем первом эхом. Вероятно, вам придется разместить некоторое пространство после первой строки или до второго для удобства чтения.
Вы можете передать параметр -n
в свою первую команду echo
, поэтому он не выводит новую строку.
В качестве быстрой демонстрации это:
echo "test : " ; echo "blah"
вы получите:
test :
blah
С новой линией между двумя выходами.
Хотя это, с -n
для первого echo
:
echo -n "test : " ; echo "blah"
вы получите следующий результат:
test : blah
Без новой строки между двумя выходами.
printf - это правильный способ решить вашу проблему (+1 kurumi), но для полноты вы также можете:
echo "$file\t$qp\t$i $( ./command 2>&1 > $file-$qp-psnr.txt )" >> psnr.txt
Вы можете использовать printf
вместо echo
, который лучше по причинам переносимости.