awk: フィルタ文字列 + 行数を計算しますか?

awk: フィルタ文字列 + 行数を計算しますか?

JSONデータがあります。

    "Item1": {
      "foo": null,
      "version": "bar",
      "result": null,
    },
    "Item2": {
      "foo": null,
      "version": "bar",
      "result": null,
    },
    "Item3": {
      "foo": null,
      "version": "bar",
      "result": null,
    },

文字列をフィルタリングできawkます。

$ awk '/version/' /tmp/json
      "version": "bar",
      "version": "bar",
      "version": "bar",

私は行数を数え、パイプなしで次の結果を得ようとしています。純粋な awk。

$ awk '/version/' /tmp/json | wc -l
3

オンラインの例では使用方法を示していますが、END私がNR望む結果は出ません。

$ awk '/version/{print NR}' /tmp/json
3
8
13

または

$ awk 'END/version/{print NR}' /tmp/json
awk: line 1: syntax error at or near /version/

ベストアンサー1

でこれを行う必要がある場合は、awk一致する行ごとに変数を増やし、すべての行が処理されたらその変数を印刷します。

$ awk '/version/{c++}END{print c}' file
3

0または、一致するものがない場合に印刷するには(上記の内容は空白行のみを印刷します)、次を使用します。

awk '/version/{c++}END{print c+0}' file

いよいよ印刷可能ただ一致する項目が 1 つ以上ある場合 (一致項目がない場合は空行以外の出力がない場合)、次を使用します。

awk '/version/{c++}END{ if(c) print c}' 

おすすめ記事