好吧,伙计们,我真的在这里陷入了死胡同,不知道还能尝试什么...
我正在为一些电子邮件统计编写一个脚本,它需要做的一件事是计算邮件日志中所有消息的完整大小,这是我到目前为止所写的:
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]
因此,我将尝试逐步解释它:
首先,我通过文件查找包含实际“大小”的所有行,然后打印第 8 个字段,在本例中为“大小 = 40992”。
接下来,我用加号替换所有逗号字符。
然后我删除除数字和加号之外的所有内容。
然后我将行首替换为“(”,并将最后一个额外的加号替换为“)”,然后是“/1048576”。所以我得到一个像这样的巨大表达:
“(1+2+3+4+5...+n)/1048576”
因为我想将所有单独的消息大小相加并将其划分,所以我得到以 MB 为单位的结果。
最后一个 awk 命令是当我得到一个十进制数时,我真的不关心精度,所以我只打印小数点之前的部分。
问题是,这不起作用......我可以发誓它在某个时候起作用,会不会是我的表情太长而无法处理?
感谢您花时间阅读:)