2014-11-04 73 views
1

字段值我用後綴繼電器從我們的電子郵件服務器發送我們的郵件文件。
我想先拿到,然後使用該值得到他們發送的電子郵件地址從某些用戶的電子郵件的序列號值。以下是從和到日誌條目的示例。我認爲你必須使用awk和sed的組合。AWK和SED發現用線的基礎上,從AWK

發件人線

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

在上面的例子中我想從第一行提取42UE78JD7JE然後發現它在第二行中的reciever線

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

。我想你會用awk與獲得該行的序列號值「[email protected]」然後使用該值來搜索具有價值和「爲=」行。

+0

有空間B/W服務器POSIX? – Hackaholic 2014-11-04 20:43:56

+0

這是一個文件。我想在Linux服務器上對maillog執行此操作。第一行向我發送電子郵件的發件人的電子郵件的序列號。我希望把該序列號在一個變量,然後使用該變量來搜索序列號和搜索短語「到= <」,這會給我的電子郵件的收件人。 – user1554967 2014-11-04 20:47:30

+0

我得到你的問題,我問在這兩個文件中的服務器和POSIX之間有任何空間? reciver和寄件人?? – Hackaholic 2014-11-04 20:48:56

回答

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=<[email protected]> from=<[email protected]> 

這就是我想你想。如果你給我們的預期輸出,它可以在reciver文件加以改進

+0

這是一件好事。我會先看看你的代碼,因爲我確實有一些awk的經驗並對其進行了細化。最後,我只是想要和來自。我不需要電子郵件的序列號。真棒編碼雖然。 – user1554967 2014-11-04 21:15:01

+0

好的,我正在編輯'to'和'from'的代碼 – Hackaholic 2014-11-04 21:20:19

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=<[email protected]>, to=<[email protected]>,