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

出力にタブ区切り値以外のものが必要な場合は、BEGINセクションにヘッダーの印刷を追加し、printの代わりにprintfを使用します。

于 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 に答える