編輯:感謝詹姆斯布朗找到了答案,我格式化命令的方式存在問題:
awk -F"," '{ if ($2*$3 > 0.5) print }'
正在作業中。
我有一個這樣的檔案:
1000,0.5,1
2000,0.5,3
4000,1,3
5000,0.2,1
我需要將每行的 $2 和 $3 相乘,并檢查結果是否優于 0.5。我讀到 -gt 運算子無法處理浮點數,而 awk 可以做到。
這是我能想到的最好的:
cat awk.txt | awk -F"," '{ if ("$2"*"$3" > "0,5") print "$line"}'
當然,它不起作用,但它不會回傳任何錯誤......
預期結果:
5000,0.2,1
你能為我指出正確的方向嗎?
非常感謝
uj5u.com熱心網友回復:
修復代碼中的錯誤后:
$ awk -F"," '{if($2*$3 > 0.5) print}' file
輸出是:
2000,0.5,3
4000,1,3
你也可以:
$ awk -F, '$2*$3>0.5' file
uj5u.com熱心網友回復:
當然,它不起作用,但它不會回傳任何錯誤......
我想解釋到底發生了什么
awk -F"," '{ if ("$2"*"$3" > "0,5") print "$line"}'
第一件事是將字串乘以$2字串$3,這會提示 GNU AWK 將它們都轉換為數字,如awk 如何在字串和數字之間轉換中所述,因為字串作為整體或任何前綴都不是有效數字,以下確實適用
無法解釋為有效數字的字串將轉換為零。
因此你實際上得到了乘法
0*0
產生數字0,這反過來又給出了以下比較
0 > "0,5"
這再次提示將字串轉換為數字,這給出了0最長0的數字構成前綴0,5,所以最后我們得到
0 > 0
這永遠不會成立,所以你得到空輸出。
uj5u.com熱心網友回復:
perl -F',' -lane'print if $F[1]*$F[2]>0.5' file
perl -lne'($a,$b)=((split/,/)[1,2]);print if $a*$b>0.5' file
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/524697.html
標籤:壳awk
