我有一个类似这样的文件:
sda 204.98 0.00 104947.26 0 210944
sda 205.50 0.00 104458.00 0 208916
sda 212.50 0.00 108800.00 0 217600
sda 225.00 0.00 114698.00 0 229396
sda 207.00 0.00 105728.00 0 211456
sda 187.00 0.00 94988.00 0 189976
sda 373.50 3704.00 2248.00 7408 4496
sda 419.50 4152.00 2508.00 8304 5016
sda 390.50 3696.00 2506.00 7392 5012
我需要使用bash脚本删除所有行,例如前三行,其中第三列和第五列包含零值,或者替代,其中最后一列具有高值(超过5位数),按顺序获得:
sda 373.50 3704.00 2248.00 7408 4496
sda 419.50 4152.00 2508.00 8304 5016
sda 390.50 3696.00 2506.00 7392 5012
我尝试过使用awk'($ 6< .....)'但没有效果。
我该怎么做?
答案 0 :(得分:3)
使用awk很容易完成。请尝试以下脚本:
awk -v max=100000 '$3 && $5 && $6 < max' data
这确保字段3和5不为零($ 3是$3 != 0
的简写),并且最后一个字段的数字为5或更少。
由于awk的默认行为是打印整行,这将输出满足此条件的所有行。
答案 1 :(得分:2)
您可以在bash脚本中使用awk
,例如:
awk '($3 > 0 && $5 > 0) {print}' file
或
awk '($3 != 0 && $5 != 0) {print}' file
或根据您的编辑(最后一栏中的最小值):
awk '($3 != 0 && $5 != 0) || ($6 > 9999) {print}'
哪里
$3
和$5
是第3和第5列变量,> 0
(大于0)还是!= 0
(不等于0),然后print
是file
。