返回包含特定列中一定范围内的数字的行,但前提是该列包含特定数字

返回包含特定列中一定范围内的数字的行,但前提是该列包含特定数字

与此问题相关...返回包含特定列中一定范围内的数字的行 返回包含特定列中一定范围内的数字的行

我知道如何删除包含特定范围内的数字的行。那么如果我只想当另一列包含数字时才删除行怎么办?

例如,如果第二列包含 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 <= maxmin <= num && num <= max.那么那就是:

awk '! ($2 == 4 && 50 <= $3 && $3 <= 85)' input
awk '$2 != 4 || $3 < 50 || 85 < $3' input

相关内容