簡體   English   中英

Gawk不能過濾掉更大的數字?

[英]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.

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