データを含むtxt / logファイルがあります。 cat sample.log/(.txt)
500,3,2
実行中のスクリプトはSample.logの値を上書きします。新しい行を上書きまたは作成するのではなく、その行にデータを追加したいと思います。
例:
Sample.log -500,3,1
Script out- 600,4,3
最終出力は次の場所に保存する必要があります。sample.log
1100,7,4
スクリプトが実行されるたびに、その値は引き続き追加されます。
この結果を得るのに役立ちます。
答え1
以下は、スクリプトを呼び出しscript.sh
て既存のファイル全体を呼び出すGNU awkを使用してこれを行う1つの方法です/tmp/sample.log
。
script.sh|\
cat /tmp/sample.log -|\
awk -F, '{for (f=1;f<=NF;f++) TOT[f]+=$f} END {for (f=1;f<length(TOT);f++) printf TOT[f]","; print TOT[length(TOT)]}' >/tmp/sample1.log
mv -f /tmp/sample1.log /tmp/sample.log
の出力をscript.sh
既存の出力と組み合わせ(1行に配置)sample.log
してから2行を追加し、awk
その結果を置き換えに使用します。sample.log
これはフィールド数に関係なく機能します(一貫している必要はありません)。区切り文字はカンマに設定されていますが、簡単に変更できます。
答え2
次の手順を試しました。
sh script >scriptout
cat sample.log scriptout|awk -F "," 'BEGIN{sum=0;kum=0;jum=0} OFS =","{sum=sum+$1}{kum=kum+$2}{jum=jum+$3}END{print sum,kum,jum}' > final_out
mv final_out sample.log