[英]Gawk not filtering out larger number?
我在程序中使用的簡單的gawk過濾器未過濾出比其余值長一個數字的值。
這是我的文本文件:
172 East Fourth Street Toronto 4 1890 1500000 6
2213 Mt. Vernon Avenue Vaughn 2 890 500000 4
One Lincoln Plaza Toronto 2 980 900000 1
列由制表符分隔。
我的gawk腳本:
echo "Enter max price"
read price
gawk -F "\t+" '$5 <= "'$price'"' file
如果輸入150001或更大的值,則會顯示1500000的值。 我認為這與gawk無法正確讀取最后一位數字有關。 我不允許更改原始文本文件,需要使用gawk命令。 任何幫助表示贊賞!
您的awk
命令執行詞匯比較而不是數值比較,因為RHS(價格值)用雙引號引起來 。
刪除雙引號會有所幫助,但是建議重新編寫命令,如下所示:
gawk -F '\t+' -v price="$price" '$5 <= price' file
現在,將外殼變量$price
使用-v
傳遞給Awk,作為Awk變量price
,這是將值傳遞給awk
的安全方法-然后,您可以使用單引號的awk
腳本,而不必拼接外殼變量或擔心外殼可能會擴展哪些部分。
事后思考 :正如Ed Morton在評論中指出的那樣, 要確保將字段或變量視為數字 ,請在其后附加+0
; 例如, $5 <= price+0
(相反,在字符串后附加""
以強制將其視為字符串 )。
默認情況下,Awk從所涉及的值和上下文中推斷是將給定值解釋為字符串還是數字-可能並不總是給出期望的結果。
您真的在為每列調用一個單獨的gawk嗎? 一個會做:
gawk -F "\t+" -v OFS="\t" \
-v city="$city" \
-v bedrooms="$bedrooms" \
-v space="$space" \
-v price="$price" \
-v weeks="$weeks" '
$2 == city && $3 >= bedrooms && $4 >= space && $5 <= price && $6 <= weeks {
$1 = $1; print
}
' listing |
sort -t $'\t' $sortby $ordering |
column -s $'\t' -t
(這不是答案,只是需要格式化的注釋)
$1=$1
位是一個awk技巧,可以使用“輸出字段分隔符”(一個選項卡)重寫當前記錄。 節省您撥打tr
的電話
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.