if/then制御構造を使用するAWK文字列の正規表現は何ですか?

if/then制御構造を使用するAWK文字列の正規表現は何ですか?

質問

AWKスクリプトで特にAWK(GAWK、MAWKなど)を使用して、フィールド6に「runner__.jpx」を含むすべてのレコードのフィールド9の値を要約したい(下線は2桁の数字0〜9)、フィールド7では「good」です。

サンプルファイル

Feb 14 11:33:16 ringer a[2388]: runner01.jpx good aa 3
Feb 14 11:33:32 ringer a[2388]: runner24.jpx good xx 1
Feb 14 11:33:39 ringer a[1894]: jogger02.jpx good aa 5
Feb 14 11:33:45 ringer a[2388]: runner99.jpx stop cc 1

試みる

どうすればいいですか?次のようなifステートメントを使ってみました。

BEGIN {
    sum = 0
}

{
    if (($6 == "runner"[0-9][0-9]".jpx") && ($7 == "good"))
        sum += $9
}

END {
        printf sum
}

フィールドの文字列を一致させるためにifステートメントを使用してこれを行う方法はありますか? if文に正規表現を使用できますか?これを行う他の方法はありますか?ありがとうございます。

ベストアンサー1

次の作業を行う必要があります。明示的なsは必要ではなく、次のようにモデルifawk操作する暗黙のモードしか必要ありません。

awk  '$6 ~ /^runner[0-9][0-9]\.jpx$/ && $7 == "good" {s += $9};
      END{print s}' input.file

おすすめ記事