我有一个监视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;工作正常。任何人都可以帮助指出我的问题吗?谢谢。
答案 0 :(得分:1)
我想这是因为它进行了非数字比较,以字母开头的字符串会更大(>
),你的号码将与or
的第二个条件相匹配。因此,您可以尝试修复它,比较第一个字段是使用正则表达式的数字,例如:
awk -v lower=$LOWER_LIMIT -v upper=$UPPER_LIMIT '
$1 ~ /^[[:digit:]]+$/ && ($1<lower || $1>upper) { print $1 }'