awk标志删除不需要的数据

时间:2016-09-26 16:41:22

标签: bash awk

另一个awk问题。

我有一个由数值

分隔的大文本文件
43   47
abc
efg
hig
21   122
hijk
lmnop

39 41
somemore
texthere

我想要做的只是在条件满足时打印文本。

这是我尝试过的,没有运气

awk '{a=$1; b=$2; if (a < 43 && a > 37 && b < 52 && b > 41) {f=1} elif (a > 43 && a < 37 && b > 52 && b < 41) {print; f=0} } f' file

如果声明满意,我想打印所有文本,如果声明不满意,我想跳过文本。

上面所需的输出

43   47
abc
efg
hig


39 41
somemore
texthere

2 个答案:

答案 0 :(得分:2)

awk '
    # on a line with 2 numbers:
    NF == 2 && $1 ~ /^[0-9]+$/ && $2 ~ /^[0-9]+$/ {
        # set a flag if the numbers fall in the given ranges
        f = (37 <= $1 && $1 <= 43 && 41 <= $2 && $2 <= 52)
    }
    f
' file

答案 1 :(得分:1)

自我解释的解决方案:

awk '
    function inrange(x, a, b) { return a <= x && x <= b }
    /^[0-9]+[\t ]+[0-9]/ {
        f = inrange($1, 37, 43) && inrange($2, 41, 52)
    }
    f
'