使用awk和sed根据awk中的字段值查找文件中的行

时间:2014-11-04 20:34:57

标签: linux awk sed

我使用后缀中继从我们的电子邮件服务器发送邮件 我想首先获取某些用户的电子邮件的序列号值,然后使用该值获取他们发送到的电子邮件地址。以下是from和to日志条目的示例。我认为你必须使用awk和sed的组合。

发件人行

Nov  4 14:29:53 server postfix/qmgr[2089]: 42UE78JD7JE: from=<sender@domain.som>, size=1182, nrcpt=1 (queue active)

接收行

Nov  4 14:29:54 server postfix/smtp[10544]: 42UE78JD7JE: to=<user@gmail.com>, relay=gmail-smtp-in.l.google.com[74.125.22.27]:25, delay=1, delays=0.02/0.

在上面的示例中,我想从第一行中提取42UE78JD7JE,然后在第二行中找到它。我想你会使用awk来获取“sender@domain.com”行中的序列号值,然后使用该值来搜索具有该值和'to ='的行。

2 个答案:

答案 0 :(得分:2)

awk '
    $7 ~ /^from=/ {from[$6]=$7} 
    $7 ~ /^to=/   {to[$6]=$7} 
    END {for (key in from) if (key in to) print from[key], to[key]}
' file
from=<sender@domain.som>, to=<user@gmail.com>,

答案 1 :(得分:0)

使用awk

awk 'NR==FNR{a[$6]=$6;b[$6]=$7}NR>FNR{if($6 in a){print substr($7,0,length($7)),substr(b[$6],0,length(b[$6]));}}' sender_file reciver_file

输出:

to=<user@gmail.com> from=<sender@domain.som>

这就是我想你想要的。如果你给我们预期的输出,它可以改进