Bash
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/
如果您真的堅持在 中執行此
awk
操作,您需要做的就是為每個匹配的行增加一個變數,然後在處理完所有行後,列印該變數:$ awk '/version/{c++}END{print c}' file 3
或者,如果您想在
0
沒有匹配項時列印(上面只會列印一個空行),請使用:awk '/version/{c++}END{print c+0}' file
最後,僅在至少有一個匹配項時才列印(因此,當沒有匹配項時,沒有輸出,而不是空行),請使用:
awk '/version/{c++}END{ if(c) print c}'