在文本中,我想根据数据范围对数据进行分类。
例如,[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时,它也不起作用。那么,为什么有时它不起作用?非常感谢!
答案 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