gpt4 book ai didi

scripting - Awk 脚本帮助 - 逻辑问题

转载 作者:行者123 更新时间:2023-12-03 06:49:37 26 4
gpt4 key购买 nike

我目前正在编写一个简单的 .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 错误的消息对于正在使用的每个邮件服务器都是不同的。我正在编制常见错误的列表)

最佳答案

+ 在 awk 中表示数字加法。如果要连接,只需将常量和/或表达式用空格分隔即可。

所以,这个

line += " " + $i

应该变成

line = line " " $i

编辑:Iff exim 日志文件(我更喜欢 Postfix :) 由一个空格分隔,以下是不是更简单:

grep -F o\' /var/log/exim/main.log | cut -d\  -f20-33 >output.txt

关于scripting - Awk 脚本帮助 - 逻辑问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/159423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com