さて、私は本当にここで行き止まりになっています、他に何を試すべきかわかりません...
私はいくつかの電子メール統計のスクリプトを書いています。それがする必要があることの1つは、メールログ内のすべてのメッセージの完全なサイズを計算することです。これは私がこれまでに書いたものです。
egrep ' HOSTNAME sendmail\[.*.from=.*., size=' maillog | awk '{print $8}' |
tr "," "+" | tr -cd '[:digit:][=+=]' | sed 's/^/(/;s/+$/)\/1048576/' |
bc -ql | awk -F "." '{print $1}'
そして、これが私のメールログからのサンプル行です:
Nov 15 09:08:48 HOSTNAME sendmail[3226]: oAF88gWb003226:
from=<name.lastname@domain.com>, size=40992, class=0, nrcpts=24,
msgid=<E08A679A54DA4913B25ADC48CC31DD7F@domain.com>, proto=ESMTP,
daemon=MTA1, relay=[1.1.1.1]
だから私はそれを段階的に説明しようとします:
最初にファイルをgrepして、実際の「サイズ」を含むすべての行を見つけ、次に8番目のフィールド(この場合は「size = 40992」)を出力します。
次に、すべてのコンマ文字をプラス記号に置き換えます。
次に、数字とプラス記号を除くすべてを削除します。
次に、行の先頭を「(」に置き換え、最後の余分なプラス記号を「)」の後に「/1048576」に置き換えます。だから私はこのような巨大な表現を得る:
"(1 + 2 + 3 + 4 + 5 ... + n)/1048576"
個々のメッセージサイズをすべて合計して分割し、結果をMB単位で取得したいからです。
最後のawkコマンドは、10進数を取得するときです。精度はあまり気にしないので、小数点の前の部分を印刷するだけです。
問題は、これが機能しないことです...そして、ある時点で機能していたことを誓うことができました。私の表現が長すぎてbcが処理できないのでしょうか。
時間を割いて読んでくれてありがとう:)