2011-03-27 21 views
13

Ho uno script di shell molto di base qui:Concatenate uscita di due comandi in una sola linea di

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 calcola alcuni valori di PSNR e scrive un riepilogo dettagliato in un file per ogni combinazione di file, qp e i. Va bene.

Il 2>> emette una riga di informazioni di cui ho veramente bisogno. Ma quando eseguito, ottengo:

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 

Quello che voglio, però, è questo:

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 

Come posso raggiungere questo obiettivo?

(Non esitate a modificare il titolo, se pensi che ci sia una più appropriata)

+0

Esattamente quello che mi serviva oggi! Grazie! – shiri

risposta

14

L'utilità echo (versione GNU) ha un'opzione -n ​​per omettere la nuova riga finale. Usalo sul tuo primo eco. Probabilmente dovrai mettere un po 'di spazio dopo la prima riga o prima del secondo per la leggibilità.

22

si poteva passare l'opzione -n al tuo primo comando echo, in modo da non produrre un ritorno a capo.


Come una rapida dimostrazione, questa:

echo "test : " ; echo "blah" 

ti porterà:

test : 
blah 

Con una nuova linea tra le due uscite.


Anche se questo, con un -n per la prima echo:

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

ti porterà il seguente output:

test : blah 

Senza alcuna nuova linea tra i due di uscita.

7

printf è il modo corretto per risolvere il problema (+1 Kurumi), ma per completezza, si può anche fare:

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

Suppongo che non ci sia modo _correct_. la soluzione di drysam ha funzionato per me ed è stato il primo a rispondere. Grazie per questo interessante one-liner però! :) – slhck

+1

Forse "corretto" è troppo forte, ma printf sarà più portatile di echo -n. –

Problemi correlati