如何打印满足特定条件的两个图案之间的线条?
例如对于输入文件部分地包含以下内容:
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的值存储7
在swap
变量中并继续比较该值。
-v OFS="\t"
您可以通过将输出字段分隔符设置为 tab:或来获得更好的输出BEGIN {OFS="\t"}
。或者您也可以通过管道传输到column -t
.