2011-03-27 20 views
13

私はここに非常に基本的なシェルスクリプトを持っている:を連結出力

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値を計算し、fileqpiの組み合わせごとにファイルへの詳細な要約を書き込みます。それはいいです。

2>>は、私が本当に必要とする1行の情報を出力します。実行された場合にでも、私が取得:

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 

どのように私はそれを達成することができますか?

(あなたはもっと適切なものがあると思う場合は、タイトルを変更すること自由に感じなさい)

+0

を!ありがとう! – shiri

答えて

14

エコーユーティリティ(GNU版)は、末尾改行を省略するための-nオプションを持っています。あなたの最初のエコーでそれを使用してください。最初の行の後にスペースを入れたり、読みやすくするためにスペースを置かなければならないでしょう。

22

それは出力に改行しないようにあなたは、あなたの最初のechoコマンドに-nオプションを渡すことができます。簡単なデモとして


、この:

echo "test : " ; echo "blah" 

はあなたを取得します:

test : 
blah 

2つの出力間の改行で。最初echoため-nと、この一方で


、2つの出力の間に改行がなければ

test : blah 

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

はあなたに次のような出力が得られます。

7

のprintfはあなたの問題(1くるみ)を解決するための正しい方法ですが、完全を期すために、あなたも行うことができます:私は今日まさに必要

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

私は_correct_方法がないと思います。ドライサムの解決策は私のために働いた、彼は最初に答えた。しかし、この面白いワンライナーに感謝します! :) – slhck

+1

'correct'が強すぎるかもしれませんが、printfはecho -nより移植性が高くなります。 –

関連する問題