玉傢伙我在一個死衚衕我真的在這裏,不知道還有什麼嘗試...Oneliner計算所有消息的完整大小的maillog
我寫一個腳本一些電子郵件統計,它需要做的是計算在maillog中的所有消息的完整大小的一件事,這是我寫到目前爲止:
egrep ' HOSTNAME sendmail\[.*.from=.*., size=' maillog | awk '{print $8}' |
tr "," "+" | tr -cd '[:digit:][=+=]' | sed 's/^/(/;s/+$/)\/1048576/' |
bc -ql | awk -F "." '{print $1}'
這裏是從我的maillog採樣線:
Nov 15 09:08:48 HOSTNAME sendmail[3226]: oAF88gWb003226:
from=<[email protected]>, size=40992, class=0, nrcpts=24,
msgid=<[email protected]>, proto=ESMTP,
daemon=MTA1, relay=[1.1.1.1]
所以我會ry逐步解釋:
首先,我通過文件grep找到包含實際「大小」的所有行,然後打印第8個字段,在本例中爲「size = 40992」。
接下來我用加號替換所有的逗號字符。
然後我刪除除數字和加號之外的所有內容。
然後,我用「(」替換了行的開頭,並用「)」替換了最後一個額外的加號,後面加上了「/ 1048576」。所以我得到了巨大的表情看起來像這樣:
「(1 + 2 + 3 + 4 + 5 ... + N)/ 1048576」
因爲我想加起來所有的個人信息和大小將其分開,以MB爲單位得出結果。
最後的awk命令是當我得到一個十進制數時,我真的不在乎精度,所以我只是在小數點前打印部分。
問題是,這是行不通的......我可以發誓它一直在工作,這可能是我的表情太長了bc處理?如果
感謝您花時間通讀:)
哇,非常感謝你,這是一個很好的方法,它的工作速度非常快!正是我在尋找:) – f10bit 2010-11-16 01:49:09
+1它也快得多。我之前用grep/sed/tr/bc的東西的唯一原因是因爲它更接近問題中的一行 – thkala 2010-11-16 01:51:59