与此问题相关...返回包含特定列中一定范围内的数字的行 返回包含特定列中一定范围内的数字的行
我知道如何删除包含特定范围内的数字的行。那么如果我只想当另一列包含数字时才删除行怎么办?
例如,如果第二列包含 4,第三列包含 50 到 85 之间的数字,我想删除行?输入
a 3 44 563
d 4 55 11
e 2 93 445
r 4 82 44
e 4 93 33
输出
a 3 44 563
e 2 93 445
e 4 93 33
我认为我们可以做这样的事情......但这行不通。
awk '$2==4' & awk '$2 > 85 && $2 < 50' input > output
有人能知道这个吗?值得注意的是,第二列仅包含 1 到 22 之间的整数。
先感谢您!
答案1
这个 awk 条件将打印这些行:
awk '$2 != 4 || $3 > 85 || $3 < 50' input
当第二列不等于 4、或者第三列大于 85、或者第三列小于 50 时,它会打印一行。
这个逻辑等价物应该具有相同的效果:
awk '! ($2 == 4 && $3 <= 85 && $3 >= 50)' input
正如评论中所指出的,编写范围比较的更清晰方法min <= num <= max
是min <= num && num <= max
.那么那就是:
awk '! ($2 == 4 && 50 <= $3 && $3 <= 85)' input
awk '$2 != 4 || $3 < 50 || 85 < $3' input