web-dev-qa-db-ja.com

if / then制御構造を使用したAWKの文字列内の正規表現?

[〜#〜]問題[〜#〜]

特にAWKスクリプトでAWK(GAWK、MAWKなど)を使用して、フィールド6に「runner __。jpx」(アンダースコアは2桁の0〜9のプレースホルダー)を含むすべてのレコードのフィールド9の値を合計したいと思います。そしてFIELD7では「良い」。

サンプルファイル

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ステートメント内で正規表現を使用できますか?これを行うための代替方法は何ですか?ありがとう。

2
user46865

以下はその仕事をするはずです。明示的なifsは必要なく、awkの暗黙的なパターンアクションモデルを使用するだけであることに注意してください。

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