Bash 用于删除不需要的数据的Awk标志

Bash 用于删除不需要的数据的Awk标志,bash,awk,Bash,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 &

另一个问题

我有一个由数值分隔的大文本文件

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
awk'
#在包含两个数字的行上:
NF==2&&$1~/^[0-9]+$/&&$2~/^[0-9]+$/{
#如果数字在给定范围内,则设置标志

f=(37自解释溶液:

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
'
awk'

范围(x,a,b)中的函数{返回一个
if
语句测试
a<43
,下一个语句测试
a>43
。如果
a==43
,怎么办?你永远不会检查精确的匹配。当你想使用一个新工具/语言时,不要只是猜测它的语法和语义,阅读一些关于它的内容,这样你就不会浪费很多时间在测试上错误。在这种情况下,请阅读Arnold Robbins的《有效的Awk编程》第四版。此外,在提问时,不要只发布一些不符合您要求的代码,并期望我们能够通过阅读错误的代码来了解您需要什么。您说您只想在满足条件的情况下打印文本ed
-什么条件?你的问题需要澄清。
a>43&&a<37
是不可能的。一个数字怎么能同时高于43和低于37?你的意思一定是
|
。但也许那应该是
else
而不是
elif
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
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
'