2015-04-18 2 views
0

У меня есть скрипт мониторинг количества сбора Монго записей:AWK, если или печать неожиданного результата

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 connection ...

Эта проблема возникает только в том случае, если я использую оператор OR, & & работает нормально. Может ли кто-нибудь указать мою проблему? Спасибо.

ответ

1

Я думаю, это потому, что оно нечетное сравнение, а строка, которая начинается с буквы, будет больше (>), что ваш номер, ведьма будет соответствовать вашему второму состоянию or. Таким образом, вы можете попытаться исправить это, сравнив первое поле с использованием регулярного выражения, например:

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

@EdMorton: Вы правы. Исправлена. – Birei

Смежные вопросы