0
Jan 29 12:28:17 torsmtp2 postfix/cleanup[16193]: 5513512078E: warning: header Subject: Well Systems - Project Updated (Published Number 561-639-2188) from unknown[10.40.6.11]; from=<Accounts@example.com> to=<bg2833@work.com> proto=ESMTP helo=<CORE1UI1>

我正在尝试提取信息并创建一个包含以下内容的表:

DATE                EMAIL                Published Number
Jan 29 12:28:17     bg2833@work.com      561-639-2188

是否可以使用 awk 或 sed 来完成此操作?

到目前为止,我能够做到以下几点

head -n 1 file | awk -F ',' 'BEGIN { print "-----------------------\nDate \tEmail\tPhone\n-----------------------"} { print $1;} END { print "-------------"; }'

输出

-----------------------
Date    Email   Phone
-----------------------
Jan 29 12:28:17 torsmtp2 postfix/cleanup[16193]: 5513512078E: warning: header Subject:       American Ramp Systems - Study Updated (Published Number 888-649-2186) from     unknown[10.40.6.11]; from=<Accounts@telmetrics.com> to=<bg2833@att.com> proto=ESMTP helo=    <CORE1UI1>
-------------

仍然不确定如何提取日期/发布的号码和电子邮件

谢谢你

4

3 回答 3

2

使用 sed 的其他方式

sed -re 's/(.*[0-9]:[0-9]+)(.*)Published Number ([0-9-]+)(.*)to=<(\w+@\w+\.\w+)(.*)>/\1\t\5\t\3/' temp.txt
于 2013-01-30T01:24:20.697 回答
1
awk -v OFS='\t' '{date=$1" "$2" "$3; email=phone=$0; gsub(/.*to=<|>.*$/,"",email);
 gsub(/.*Published Number |).*/,"",phone); print date, email, phone}' file
Jan 29 12:28:17 bg2833@work.com 561-639-2188

add printing the header in a BEGIN section and use printf instead of print if you want something other than tab-separated values in the output.

于 2013-01-29T20:05:22.640 回答
1

因为,这看起来像一个日志文件,我假设不同记录之间的格式不会改变:

您可以使用以下代码提取日期:
date=$(cat extract.txt | cut -d ' ' -f -3)

您可以使用以下代码段提取到电子邮件(我知道这有点复杂):
email=$(cat extract.txt | sed 's/.*\( to[^ ]*\).*/\1/g' | cut -d '<' -f2 | cut -d '>' -f1)

并且,公布的数字可以提取如下:
number=$(cat extract.txt | sed 's/.*Published Number \([^)]*\).*/\1/g')

我希望这有帮助。

更新
使用以下代码段可以很容易地提取电子邮件:
email=$(cat extract.txt | sed 's/.* to=<\([^>]*\).*/\1/g')

于 2013-01-29T19:17:45.837 回答