【发布时间】:2010-11-16 00:52:23
【问题描述】:
好吧,伙计们,我真的走投无路了,不知道还能尝试什么......
我正在为一些电子邮件统计编写一个脚本,它需要做的一件事是计算邮件日志中所有消息的完整大小,这是我到目前为止所写的:
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 命令是当我得到一个十进制数时,我真的不关心精度,所以我只打印小数点之前的部分。
问题是,这行不通...我可以发誓它在某个时候有效,会不会是我的表情太长而无法处理?
感谢您花时间阅读:)
【问题讨论】: