使用 AWK 如何计算匹配的总行数?

Using AWK how can I total lines that match?

我正在尝试从 iostat 中计算出与 nvme* hhd 匹配的行的总值(以兆字节为单位),然后 awking 计算从第 x 行到第 z 行的总数,在我的例子中是 2 行。

iostat -m  <-- in megabytes

iostat -m |  awk '{if( ~ /nvme*/ ) print , , }'

------------------
9.38,   0.20,  0.57

13.67,  0.01,  1.60
------------------- 
23.05, 0.21, 2.17  <<-- The total

我怎样才能做到这一点?

尝试:

iostat -m |  awk ' ~ /nvme*/{a+=;b+=;c+=;print , , } END{print"--------------";print a,b,c}'

工作原理

  • ~ /nvme*/

    这将选择第一个字段与正则表达式匹配的行 nvme*。我的 iostat 没有生成包含 nvme 的行。因此,由您决定这是否真的是适合您的情况的正则表达式。

  • a+=;b+=;c+=

    这保留了变量 abc.

    [=48 中感兴趣的三列的总和 运行 =]
  • print , ,

    这将打印感兴趣的三列。

  • END{print"--------------";print a,b,c}

    读入所有行后,打印出总数。 print"--------------" 在我的系统上生成了一个漂亮的 table。如果您的 iostat 以不同的格式生成输出,您可能需要相应地进行调整。