2015-04-18 19 views
0

我有一個shell腳本監控蒙戈收集記錄數: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,但是它打印出的第一列一堆輸出,像蒙戈德連接...

此問題只發生在我使用OR運算符& &工作正常。任何人都可以幫助指出我的問題嗎?謝謝。

回答

1

我想這是因爲它進行了非數字比較,而以字母開頭的字符串會更大(>),因此您的電話號碼會匹配您的第二個條件or。所以你可以嘗試修正它比較第一個字段是數字使用正則表達式,如:

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

@EdMorton:你說得對。固定。 – Birei