私は現在、" o' " に一致する文字列の Exim ログ ファイルを解析するための単純な .sh スクリプトを作成しています。現在、output.txt を表示すると、すべての行 (606 行) に 0 が出力されます。awk はエラーをスローしないため、私のロジックが間違っていると思います。
これが私のコードです(連結とカウンターの問題のために更新されました)。編集: dmckee の回答からいくつかの新しいコードを採用しました。これは、単純さを優先して古いコードよりも現在作業しています。
awk '/o'\''/ {
line = "> ";
for(i = 20; i <= 33; i++) {
line = line " " $i;
}
print line;
}' /var/log/exim/main.log > output.txt
何か案は?
編集: わかりやすくするために、メール アドレスの「o」を検索しています。これは、「」はメール アドレスでは無効な文字であるためです (データベースでは、o' がプレフィックスされた名前でのみ表示されます)。
編集 2: コメントの要求に従って、ここにいくつかの望ましい出力のサニタイズされたサンプルがあります:
[xxx.xxx.xxx.xxx] kathleen.o'toole@domain.com <kathleen.o'toole@domain.com> routing defer (-51): retry time not reached
[xxx.xxx.xxx.xxx] julie.o'brien@domain.com <julie.o'brien@domain.com> routing defer (-51): retry time not reached
[xxx.xxx.xxx.xxx] james.o'dell@domain.com <james.o'dell@domain.com> routing defer (-51): retry time not reached
[xxx.xxx.xxx.xxx] daniel_o'leary@domain.com <aniel_o'leary@domain.com> routing defer (-51): retry time not reached
ループで 20 から開始する理由は、20 番目のフィールドより前のすべてが標準のログ情報であり、ここでの目的には必要ないためです。このソリューションに必要なのは、IP とそれ以降のすべてです (各 550 エラーのメッセージは、使用されているメール サーバーごとに異なります。一般的なもののリストを編集しています)。