2016-11-11 92 views
0

我有以下幾點:如何在AWK中使貨幣字段大於和小於值?

field:field:field:$90.00:field 
field:field:field:$85.00:field 

我試圖讓現場$ 4的除大於或= 90,小於100,但是,我有我的awk語句錯誤的地方,我無法弄清楚在何處以及爲什麼它錯了。

awk -F: '{gsub("\$","",$4); if ($4 >= 90 && $4 < 100) print $1 ":" $2 " " $4 }' file.txt > output.txt 

我試圖刪除$符號使它更像一個整數,如何解決這個問題?

回答

1

使用sub,因爲您只想執行單個替換,而不是全局替換。此外,使用正則表達式文本,而不是一個字符串,它首先由AWK正因爲如此解析,需要雙轉義:

sub(/\$/, "", $4) 

可選,你可以錨添加到字段/^\$/的開始。

就我個人而言,我認爲在您的print命令中使用逗號插入輸出字段分隔符(默認情況下爲空格)會更好。

另外,請記住,awk程序的結構經常是condition { action },因此您無需編寫if

結合所有:

awk -F: '{ sub(/\$/, "", $4) } ($4+0) >= 90 && ($4+0) < 100 { print $1":"$2, $4 }' file.txt > output.txt 

可以說,你可以使病情的sub一部分,因爲它會返回1(真),當它換人,但我不認爲有多大的優勢,這樣做。

請注意,我已將0添加到該字段以確保執行數字比較。原因如下:GNU awk manual

字符串常量或字符串操作的結果具有字符串屬性。

+0

謝謝:),我得到了一些奇怪的東西發生,如果我編輯的awk值,並使其80到90我什麼都沒有得到,我必須改變$$ ||。並返回它的工作,同樣的事情,如果我想改變awk回到90到100 .. awk緩存什麼嗎? – Hopelessone

+0

我剛做了一個修改腳本的修改。 –

+0

謝謝你的答案是完美:) – Hopelessone

1
echo "$x" | awk -F: '{gsub("\\$","",$4); if ($4 >= 90 && $4 < 100) print $1 ":" $2 " " $4 }' 
field:field 90.00 

雙逃脫美元符號。

相關問題