另一个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
答案 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
'