特定の処理のログを抽出したく、awkで行っています。
範囲指定はできるのですが、条件を加えると最初の行が取得できません。
ログファイルは下記のような感じです。
start 2024/01/01 00:00:00.123 XXX-XXXXX-XXX RunA [START] ID:AAA NAME:AAA PASS:AAA DESCRIPTION:AAA 2024/01/01 00:00:10.123 XXX-XXXXX-XXX RunB [END] end start 2024/01/10 00:00:00.123 XXX-XXXXX-XXX RunA [START] ID:BBB NAME:BBB PASS:BBB DESCRIPTION:BBB 2024/01/10 00:00:10.123 XXX-XXXXX-XXX RunB [END] end start 2024/01/15 00:00:00.123 XXX-XXXXX-XXX RunA [START] ID:ABC NAME:ABC PASS:ABC DESCRIPTION:ABC 2024/01/15 00:00:10.123 XXX-XXXXX-XXX RunB [END] end start 2024/01/15 00:00:20.123 XXX-XXXXX-XXX RunA [START] ID:CCC NAME:CCC PASS:CCC DESCRIPTION:CCC 2024/01/15 00:00:30.123 XXX-XXXXX-XXX RunB [END] end
これに対し下記awkコマンド①を実行します。
awk '/RunA \[START\]/,/RunB \[END\]/' logfile
出力は下記で、これは期待通りです。
2024/01/01 00:00:00.123 XXX-XXXXX-XXX RunA [START] ID:AAA NAME:AAA PASS:AAA DESCRIPTION:AAA 2024/01/01 00:00:10.123 XXX-XXXXX-XXX RunB [END] 2024/01/10 00:00:00.123 XXX-XXXXX-XXX RunA [START] ID:BBB NAME:BBB PASS:BBB DESCRIPTION:BBB 2024/01/10 00:00:10.123 XXX-XXXXX-XXX RunB [END] 2024/01/15 00:00:00.123 XXX-XXXXX-XXX RunA [START] ID:ABC NAME:ABC PASS:ABC DESCRIPTION:ABC 2024/01/15 00:00:10.123 XXX-XXXXX-XXX RunB [END] 2024/01/15 00:00:20.123 XXX-XXXXX-XXX RunA [START] ID:CCC NAME:CCC PASS:CCC DESCRIPTION:CCC 2024/01/15 00:00:30.123 XXX-XXXXX-XXX RunB [END]
しかし、下記awkコマンド②の場合、期待通りにはなりません。
awk '/RunA \[START\]/,/RunB \[END\]/ {if ($0 ~ /ID:BBB/) {found=1} if (found) print} /RunB \[END\]/ {found=0}' logfile
出力は下記の通りで、RunA [START]
を含む行が出力されていませんでした。
ID:BBB NAME:BBB PASS:BBB DESCRIPTION:BBB 2024/01/10 00:00:10.123 XXX-XXXXX-XXX RunB [END]
なぜ②ではRunA [START]
の行が出力されなくなったのでしょうか。
回答2件
あなたの回答
tips
プレビュー