带有变量的awk-if有时无法正常工作

时间:2018-07-14 05:30:29

标签: shell variables if-statement awk

在文本中,我想根据数据范围对数据进行分类。

例如,[8,10)中的所有8.1、9.1、9.9。我在awk-if中使用分别称为left和right的变量分别替换8和10。但这不能正常工作。

我的数据是这样的:

9.1 aa
9.2 bb
10.1 cc
11.9 dd

然后我的脚本如下:

left=8;right=10                    #left=10;right=12
echo "["$left","$right"]:"
cat data | awk '{if(($1>="'$left'")&&($1<"'$right'")) print $2}' | xargs

结果为空。

[8,10]:

但是如果我直接使用8和10(不带变量),那就可以了。当我使用left = 10,right = 12时,它也可以正常工作。

我还发现,当left = 98,right = 100时,它也不起作用。那么,为什么有时它不起作用?非常感谢!

2 个答案:

答案 0 :(得分:2)

使用awk的选项-v

left=8;right=10
awk -v l="$left" -v r="$right" '{if($1>=l&&$1<r) print $2}' data

或带有环境变量:

export left=8 right=10
awk '{if($1>=ENVIRON["left"]&&$1<ENVIRON["right"]) print $2}' data

输出:

aa
bb

答案 1 :(得分:-1)

您正在执行字符串比较,但需要数字比较。只需交换引号即可:

 left=8;right=10 #left=10;right=12
 echo "["$left","$right"]:"
 cat data | awk '{if(($1>='"$left"')&&($1<'"$right"')) print $2}' | xargs