2011-03-27 13 views
13

Mam bardzo prosty skrypt tutaj:dodawać wyjście z dwóch komend w jednej linii

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 oblicza pewne wartości PSNR i zapisuje szczegółowe podsumowanie do pliku dla każdej kombinacji file, qp i i. W porządku.

Numer 2>> generuje jedną linię informacji, której naprawdę potrzebuję. Ale gdy są wykonywane, otrzymuję:

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 

Co chcę jednak, jest to:

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 

Jak mogę to osiągnąć?

(Prosimy o zmianę tytułu, jeśli uważasz, że jest to bardziej odpowiednie jeden)

+0

Dokładnie to, co potrzebne już dziś! Dzięki! – shiri

Odpowiedz

14

Narzędzie echo (wersja GNU) ma opcję -n, aby pominąć końcowy znak nowej linii. Użyj tego na pierwszym echu. Prawdopodobnie będziesz musiał umieścić trochę miejsca po pierwszym wierszu lub przed drugim, aby uzyskać czytelność.

22

Ty mógł przejść do opcji pierwszej komendzie echo-n, więc nie ma wyjścia nowej linii.


Jako szybki demonstracji, to:

echo "test : " ; echo "blah" 

będzie Ci:

test : 
blah 

Dzięki nowej linii pomiędzy dwoma wyjściami.


Mimo to, z -n dla pierwszego echo:

echo -n "test : " ; echo "blah" 

będzie Ci następujący wynik:

test : blah 

Bez nowej linii łączącej oba wyjścia.

7

printf jest poprawny sposób rozwiązania problemu (+1 Kurumi), ale pod względem kompletności, można również zrobić:

 
    echo "$file\t$qp\t$i $(./command 2>&1 > $file-$qp-psnr.txt)" >> psnr.txt  
+0

Domyślam się, że nie ma _prawidłowego_ sposobu. Rozwiązanie drysam zadziałało dla mnie i on pierwszy odpowiedział. Dzięki za ten interesujący jeden liniowiec! :) – slhck

+1

Może "poprawny" jest zbyt silny, ale printf będzie bardziej przenośny niż echo -n. –

Powiązane problemy