Bash

awk:過濾字元串+計數行數?

  • August 7, 2020

我有一些 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

線上範例顯示瞭如何使用ENDNR但這不會產生我正在尋找的結果:

$ 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}' 

引用自:https://unix.stackexchange.com/questions/603225