2016-08-17 6 views
1

私は、フィールドセパレータとして;という非常に整然としたCSVファイルを持っています。フィールド1には名前があり、フィールド3または4には、アドレスの詳細がコンマで区切られ、不特定多数のエントリがあり、主に電子メールアドレスが含まれます。だから、これは次のようになります:awkの中でgrepを使う

Doe, Jon; Some information ; some more information; di: address details, p: () 56789, F: 252470, [email protected]  
Miller, Mariella; Some information ; di: other address, p: (09876) 54321, [email protected]  
Brown, Sam; Other information ; di: other address with no e-mail, p: (09876) 54321 

名前と一緒にファイルから電子メールアドレスを抽出します。ラインで@がある場合

grep -i -o "[A-Z0-9._%+-]\[email protected][A-Z0-9.-]\+\.[A-Z]\{2,4\}" mylist.csv 

は、私が呼ばれるのgrepがしたい:私は、私はこの素敵なgrepをして電子メール・アドレスを見つけることができます

BEGIN {FS = ";"} 
/@/ {print $1} 

と名前を取得することができます、このような出力が得られ:

Doe, Jon, [email protected] 
Miller, Mariella, [email protected] 

しかし、私はAWKからのgrepを呼び出すことができますか見当もつかない。

+0

'awk'は、文字通りすべてを行うことができます' grep'ができます。外部ツールを使用することにはほとんど意味がありません。 –

答えて

2

あなたがgawk使用できる:

$ gawk -F\; 'match($0, /(\[email protected][^@]+.)/, a){print $1", "a[1]}' file 
Doe, Jon, [email protected]  
Miller, Mariella, [email protected] 

documentationから:

を正規表現は、丸括弧が含まれている場合、アレイ の整数インデックス要素は、対応する一致文字列の一部を含むように設定されています カッコ内の部分式。

説明

match($0, /(\[email protected][^@]+.)/, a)二つの方法で私たちを提供します、試合機能は、我々は印刷を入力し、正規表現は、メールアドレスをキャプチャする場合にのみ、になります最後の結果を示す部分。

0

awkをあなたがこれを行うことができます使用:

awk -F ';' '$NF ~ /@/{sub(/ *$/, "", $NF); sub(/.* /, "", $NF); print $1 ",", $NF}' file 

Doe, Jon, [email protected] 
Miller, Mariella, [email protected] 
関連する問題