ループを含むシェル スクリプトがあります。このループは別のスクリプトを呼び出しています。ループの各実行の出力は、ファイル (outOfLoop.tr) 内に追加されます。ループが終了すると、awk コマンドは特定の列の平均を計算し、結果を別のファイル (fin.tr) に追加する必要があります。最後に、(fin.tr) が出力されます。
ループからの結果を (outOfLoop.tr) ファイルに追加する最初の部分を取得することができました。また、私のawkコマンドは機能しているようです...しかし、フォーマットに関して最終的に期待される出力が得られません。私は何かが欠けていると思います。これが私の試みです:
#!/bin/bash
rm outOfLoop.tr
rm fin.tr
x=1
lmax=4
while [ $x -le $lmax ]
do
calling another script >> outOfLoop.tr
x=$(( $x + 1 ))
done
cat outOfLoop.tr
#/////////////////
#//I'm getting the above part correctly and the output is :
27 194 119 59 178
27 180 100 30 187
27 175 120 59 130
27 189 125 80 145
#////////////////////
#back again to the script
echo "noRun\t A\t B\t C\t D\t E"
echo "----------------------\n"
#// print the total number of runs from the loop
echo "$lmax\t">>fin.tr
#// extract the first column from the output which is 27
awk '{print $1}' outOfLoop.tr >>fin.tr
echo "\t">>fin.tr
#Sum the column---calculate average
awk '{s+=$5;max+=0.5}END{print s/max}' outOfLoop.tr >>fin.tr
echo "\t">>fin.tr
awk '{s+=$4;max+=0.5}END{print s/max}' outOfLoop.tr >>fin.tr
echo "\t">>fin.tr
awk '{s+=$3;max+=0.5}END{print s/max}' outOfLoop.tr >>fin.tr
echo "\t">>fin.tr
awk '{s+=$2;max+=0.5}END{print s/max}' outOfLoop.tr >> fin.tr
echo "-------------------------------------------\n"
cat fin.tr
rm outOfLoop.tr
フォーマットを次のようにしたい:
noRun A B C D E
----------------------------------------------------------
4 27 average average average average
max
結果の出力 (outOfLoop ファイルの出力) の間に新しい行があったため、awk コマンド内で 0.5ずつインクリメントしました。