
コマンドを実行するとき:
awk '/from/ {print $7} /to/ { print $7}' erroMuitoDoido.txt
ファイルは次のとおりです
May 19 04:44:43 server postfix/smtpd[32595]: CDAB515013: client=servidor.dominio.com.br[10.10.10.44]
May 19 04:44:43 server postfix/cleanup[18651]: CDAB515013: message-id=<[email protected]>
May 19 04:44:43 server postfix/qmgr[16684]: CDAB515013: [email protected], size=19590, nrcpt=1 (queue active)
May 19 04:44:50 server postfix/pipe[32596]: CDAB515013: [email protected], relay=dovecot, delay=6.2, delays=0.02/6/0/0.14, dsn=2.0.0, status=sent (delivered via dovecot service)
May 19 04:44:50 server postfix/qmgr[16684]: CDAB515013: removed
出力は次のとおりです
[email protected],
[email protected],
[email protected],
問題は「というラインだ。[Eメール保護]、"が2回表示されます。この問題をどのように解決できますか?
AWKバージョン:GNU Awk 4.0.0
オペレーティングシステム:Debian 6、OpenSuse 12.1、CentOS 6.2
答え1
答え2
入力がそのパターンと一致すると、すべての操作が順次実行されます。入力が両方のパターンと一致すると、両方の操作が実行されます。
1 つのパターンに一致するかどうかにかかわらず、フィールドを印刷するには、次の 2 つを組み合わせます。
awk '/from/ || /to/ { print $7}' erroMuitoDoido.txt
ここでは、2 つの式を 1 つの正規表現一致に結合できます。
awk '/from|to/ { print $7}' erroMuitoDoido.txt
from
現在実行中の操作の場合、一致をフィールドの先頭に固定する必要があります。これは、サブストリングまたは以下を含むEメールアドレスを一致させたくない可能性があるためですto
。
awk '$7 ~ /^(from|to)=/ { print $7}' erroMuitoDoido.txt
他の処理が必要な場合は、より正確な一致によってパターンが重ならないため、別々の操作を使用できます。
awk '$7 ~ /^from=/ { … } $7 ~ /^to=/ { … }' erroMuitoDoido.txt
処理を中止して次の行に移動するには、キーワードを使用できますnext
。