awk如果或正在打印意外的结果

时间:2015-04-18 17:06:44

标签: bash mongodb awk

我有一个监视mongo集合记录号的shell脚本:

LOWER_LIMIT=${1:-1000}
UPPER_LIMIT=${2:-4000}
xxx/bin/mongo --host myhost mydb -u username -p pwd --eval 'db.myCollection.count()'|awk -v lower=$LOWER_LIMIT -v upper=$UPPER_LIMIT '{if($1<lower || $1>upper) print $1}'

我期待空输出,因为实际记录数是3000,但是它打印出一堆输出的第一列,比如mongodb连接......

如果我使用OR运算符,&amp;&amp;工作正常。任何人都可以帮助指出我的问题吗?谢谢。

1 个答案:

答案 0 :(得分:1)

我想这是因为它进行了非数字比较,以字母开头的字符串会更大(>),你的号码将与or的第二个条件相匹配。因此,您可以尝试修复它,比较第一个字段是使用正则表达式的数字,例如:

awk -v lower=$LOWER_LIMIT -v upper=$UPPER_LIMIT '
    $1 ~ /^[[:digit:]]+$/ && ($1<lower || $1>upper) { print $1 }'