Объединение вывода двух команд в одну строку

У меня есть очень простой сценарий оболочки:

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
Другие вопросы по тегам