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>
-------------
仍然不确定如何提取日期/已发布的号码和电子邮件
谢谢
答案 0 :(得分:2)
使用sed的其他方式
sed -re 's/(.*[0-9]:[0-9]+)(.*)Published Number ([0-9-]+)(.*)to=<(\w+@\w+\.\w+)(.*)>/\1\t\5\t\3/' temp.txt
答案 1 :(得分: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')
答案 2 :(得分: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
在BEGIN部分添加打印标题,如果您想要输出中除标签分隔值以外的其他内容,请使用printf而不是print。