当第 6 列或第 7 列大于 90% 时打印匹配行

当第 6 列或第 7 列大于 90% 时打印匹配行

我的文本文件中有数据,如下所示。

server         volume               available total   used  percent-used percent-vol-space
--------------- -------------------- --------- ------- ----- ------------ ----------------------
TEMPSERVER      TEMP_root       972.4MB     972.8MB 388KB 5%           5%
TEMPSERVER      TEMPVOL01           2.59TB      5.13TB  2.55TB 54%         10%
TEMPSERVER      TEMPVOL02           2.26TB      4.10TB  1.53TB 50%         10%
TEMPSERVER      TEMPVOL02_Clone     2.26TB      4.10TB 1.57TB 50% 10%
TEMPSERVER      TEMPVOL03           1.79TB      3.88TB  2.10TB 63%         20%
TEMPSERVER      TEMPVOL03_Clone     2.26TB      4.10TB 1.79TB 50% 10%
TEMPSERVER      TEMPVOL04           3.32TB      4.30TB  807.3GB 30%        10%
22 entries were displayed.

现在,如果第 6 列或第 7 列中的值大于 90%,我想打印每一行。我该怎么做呢?

答案1

awk 'NR > 2 && (0+$6 > 90 || 0+$7 > 90)' <file

这将逐行读取数据,每当一行的第 6 或第 7 字段中的数字大于 90 时,就会打印该数据。我们跳过前两行标题行,NR > 2并在第六列和第七列中的值中添加零,以强制转换为数字(%数据中的符号将因此被删除),然后再针对 90 进行测试。

答案2

perl -lane 'print if $. <= 2 || grep { $_ > 90. } @F[5,6]' input-data.file

这些行按空格分割,字段存储在@F从 0 开始索引的数组中。标题(第 1,2 行)被无条件打印,其余部分根据过滤器查找第 6 和/或第 7 字段(至少包含 90% 使用率)来选择。

相关内容