我目前正在编写一个简单的 .sh 脚本来解析 Exim 日志文件中匹配“o”的字符串。目前,在查看 output.txt 时,每行(606 行)上都打印一个 0。我猜我的逻辑是错误的,因为 awk 不会抛出任何错误。
这是我的代码(针对连接和计数器问题进行了更新)。编辑:我已经从 dmckee 的答案中采用了一些新代码,我现在正在使用旧代码来支持简单性。
awk '/o'\''/ {
line = "> ";
for(i = 20; i <= 33; i++) {
line = line " " $i;
}
print line;
}' /var/log/exim/main.log > output.txt
有任何想法吗?
编辑:为了清楚起见,我在电子邮件地址中使用“o”,因为 ' 是电子邮件地址中的非法字符(在我们的数据库中,仅以 o' 为前缀的名称出现)。
编辑 2:根据评论请求,这里是一些所需输出的经过消毒的样本:
[xxx.xxx.xxx.xxx] kathleen.o'toole@domain.com <kathleen.o'toole@domain.com> routing defer (-51): retry time not reached
[xxx.xxx.xxx.xxx] julie.o'brien@domain.com <julie.o'brien@domain.com> routing defer (-51): retry time not reached
[xxx.xxx.xxx.xxx] james.o'dell@domain.com <james.o'dell@domain.com> routing defer (-51): retry time not reached
[xxx.xxx.xxx.xxx] daniel_o'leary@domain.com <aniel_o'leary@domain.com> routing defer (-51): retry time not reached
我在循环中从 20 开始的原因是因为第 20 个字段之前的所有内容都只是标准日志信息,我在这里不需要这些信息。我所需要的只是该解决方案的 IP 及其他所有内容(每个 550 错误的消息对于每个正在使用的邮件服务器都不同。我正在编译一个常见的列表)