![当第 6 列或第 7 列大于 90% 时打印匹配行](https://linux22.com/image/11039/%E5%BD%93%E7%AC%AC%206%20%E5%88%97%E6%88%96%E7%AC%AC%207%20%E5%88%97%E5%A4%A7%E4%BA%8E%2090%25%20%E6%97%B6%E6%89%93%E5%8D%B0%E5%8C%B9%E9%85%8D%E8%A1%8C.png)
我的文本文件中有数据,如下所示。
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% 使用率)来选择。