[編集した質問が間違っていた] このコードの出力を 'logfile'という名前のファイルに保存し、そのログファイルの計算にエラーがあるだけです。エラーメッセージをbashのログファイルにリダイレクト
for f in *.log; do
awk 'NF && NR>1 && $0!~/total:/
{
things_cost=$2*$3;
overalltotal=(overalltotal!="")? overalltotal"+"things_cost : things_cost;
if(things_cost!=$4)
{
things_er[$1]=things_cost" instead of "$4
}
err_t+=$4; t+=things_cost;
}
$0~/total/ && err_t
{
print "Error in calculations:";
for(i in things_er)
{
print "Things total for "i" is wrong: it should be "things_er[i]
}
print "Overalltotal is wrong: It should be "t; next
}1' "$f" tmpfile && mv tmpfile logfile
done
上記のコードを使用すると、エラーはログファイル内で繰り返し表示され、非常に判読不能な形式になります。私は以下の入力ファイルを使用しています。私は、私はあなたが標準エラー出力と標準出力の両方の出力を持つようにしたいという思い日付とエラーが
Date: 01-01-2007
Sold price total
thing1 3 7098 22394
thing2 2 6500 13000
thing3 20 300 6000
Overalltotal: 41394
-----------------------------------
Date: 04-01-2007
Sold price total
thing1 10 700 5000
thing2 48 900 43200
Overalltotal: 46020
はあなたにエラーがありますか? error.logファイルは、awkコマンドの戻りコードが0より大きいコマンドの場合にのみ設定されます。 –
入力ファイルの計算でエラーをログファイルに出力しようとしています。私はこの「for」ループの出力を「ログファイル」に直接リダイレクトしようとしましたが動作しませんでした。 – User88
未設定の変数のデフォルトは0です。条件付きでなくても 'overalltotal + = things_cost'と書くことができます。 – chepner