2013-10-10 57 views
0

給予正確的輸出,我面臨Cygwin的一個問題,當我在Unix的環境中執行以下命令,然後輸出來了不同的比較Cygwin的腳本不Cygwin中

echo 0000036703386618|awk '{$1=$1+0; print $1}' 

輸出是Unix的

36703386618 

輸出是在Cygwin中

3.67034e+10 

請協助

+1

我不能訪問'Cygwin'環境,但你可以嘗試使用'printf()'格式化'print'來強制使用'integer'輸出,如:'printf'%d \ n「,$ 1'。它有幫助嗎? – Birei

回答

2

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" |