スクリプトによって生成された出力値を使用してファイルに値を追加します。

スクリプトによって生成された出力値を使用してファイルに値を追加します。

データを含む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

関連情報