簡體   English   中英

awk如果或正在打印意外結果

[英]awk if or is printing unexpected result

我有一個監視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 connect ...

僅當我使用OR運算符且&&正常工作時,才會發生此問題。 誰能幫我指出我的問題? 謝謝。

我猜這是因為它進行了非數字比較,並且以字母開頭的字符串將比您的數字大( > ),女巫將匹配您的or第二個條件。 因此,您可以嘗試使用正則表達式比較第一個字段為數字來解決此問題,例如:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM