打印与 awk 中的条件匹配的两个模式之间的行

打印与 awk 中的条件匹配的两个模式之间的行

如何打印满足特定条件的两个图案之间的线条?

例如对于输入文件部分地包含以下内容:

Time         %MEM    %CPU    %SWAP
00:05:02      7.3     8.4     3.5
00:10:02      10      4.3     4.5
00:15:02      8.5     4.4     6.7
00:20:02      25.3    35.8    7.3
00:25:02      74.6    28.4    7.3
00:30:02      67.2    88.3    7.3
00:35:02      35.4    87.4    7.3
00:40:02      27.3    92.8    7.3
00:45:02      45.3    83.2    10.5
00:50:02      30      65.7    10.5
01:00:02      92.3    66.4    10.5
01:05:02      13.1    69.4    13.5
01:10:02      45.2    77.4    13.5
01:15:02      48.7    78.8    13.5
01:20:02      49.1    80.5    13.5
01:25:02      72      83.9    13.5
END

我想打印第一次和每个大于 7 的交换值的交换值。所以我的输出将是:

00:20:02   7.3
00:45:02   10.5
01:05:02   13.5

我努力了:

awk '/%SWAP/{flag=1;next}/End/{flag=0}flag' myFile

打印所有行。我也尝试过:

awk '/%SWAP/ {flag=1;next}
     /End/{flag=0}
     {if ($10 > max) {max=$10; print $1 " " $2 " " $4}}' myFile

但这给了我文件前面部分的输出$4

有人有解决方案吗?如有解释,将不胜感激。

答案1

你可以说:

$ awk '($4>7 && $4!=swap) {swap=$4; print $1, $4}' file
00:20:02 7.3
00:45:02 10.5
01:05:02 13.5

即,将最后一次大于SWAP的值存储7swap变量中并继续比较该值。

-v OFS="\t"您可以通过将输出字段分隔符设置为 tab:或来获得更好的输出BEGIN {OFS="\t"}。或者您也可以通过管道传输到column -t.

相关内容