0
給予正確的輸出,我面臨Cygwin的一個問題,當我在Unix的環境中執行以下命令,然後輸出來了不同的比較Cygwin的腳本不Cygwin中
echo 0000036703386618|awk '{$1=$1+0; print $1}'
輸出是Unix的
36703386618
輸出是在Cygwin中
3.67034e+10
請協助
給予正確的輸出,我面臨Cygwin的一個問題,當我在Unix的環境中執行以下命令,然後輸出來了不同的比較Cygwin的腳本不Cygwin中
echo 0000036703386618|awk '{$1=$1+0; print $1}'
輸出是Unix的
36703386618
輸出是在Cygwin中
3.67034e+10
請協助
Awk實際上並沒有將該值存儲爲整數,而是將其存儲爲浮點值,因此您可能會因輸出器無法在非科學中顯示大於32位的值而導致輸出錯誤格式(這只是一個猜測,但它是當我們切換到mawk會發生什麼)
natsu ~> echo 0000036703386618|mawk '{$1=$1+0; print $1}'
3.67034e+10
natsu ~> echo 0000036703386618|gawk '{$1=$1+0; print $1}'
36703386618
記住,因爲該值的內部表示的,它會產生一些意想不到的結果:
natsu ~> echo 0000036703386618000000000|gawk '{$1=$1+0; print $1}'
36703386617999998976
一旦你處理64位數字,但是,你應該開始使用一些東西,哈哈適當地控制它們 - 例如BC
natsu ~> bc <<<"0000036703386618000000000 + 0"
36703386618000000000
...前面的例子使用<<<
的bash重定向從字符串/變量取標準輸入,而不必做echo "$var" |
我不能訪問'Cygwin'環境,但你可以嘗試使用'printf()'格式化'print'來強制使用'integer'輸出,如:'printf'%d \ n「,$ 1'。它有幫助嗎? – Birei