2011-03-27 12 views
13

Tengo un script de shell muy básico aquí:salida concatenación de dos comandos en una sola línea

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 calcula algunos valores de PSNR y escribe un resumen detallado en un archivo para cada combinación de file, qp y i. Esta bien.

El 2>> genera una línea de información que realmente necesito. Sin embargo, cuando se ejecuta, me sale:

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 

Lo que quiero, sin embargo, es la siguiente:

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 

¿Cómo puedo lograr eso?

(No dude en cambiar el título si le parece que es una pregunta más apropiada)

+0

Exactamente lo que necesitaba hoy! ¡Gracias! – shiri

Respuesta

14

La utilidad de eco (versión GNU) tiene una opción -n para omitir la nueva línea final. Úselo en su primer eco. Probablemente tengas que poner algo de espacio después de la primera línea o antes del segundo para poder leerlo.

22

Usted podría pasar la opción -n a su primer comando echo, por lo que no tiene salida de una nueva línea.


Como una demostración rápida, esto:

echo "test : " ; echo "blah" 

le conseguirá:

test : 
blah 

Con un salto de línea entre las dos salidas.


Si bien esto, con un -n por primera echo:

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

le dará el siguiente resultado:

test : blah 

Sin ningún salto de línea entre los dos de salida.

7

printf es la forma correcta de resolver su problema (1 Kurumi), pero está completo, también se puede hacer:

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

Supongo que no hay _correcto_ camino. La solución de Drysam funcionó para mí y él fue el primero en responder. ¡Gracias por este interesante juego de una línea! :) – slhck

+1

Tal vez 'correcto' es demasiado fuerte, pero printf será más portátil que echo -n. –

Cuestiones relacionadas