《awk的bug》要點:
本文介紹了awk的bug,希望對您有用。如果有疑問,可以聯系我們。
在對日志信息進行實時監控分析時,需要對日志中納秒級的時間進行計算,邏輯比較簡單:找出開始時間、結束時間,遇到結束時間后輸出時間間隔.
日志中的部分數據如下:
一開始寫出來是這樣的:
輸出結果看似就是我想要的:
有的朋友可能看到這個結果后就直接使用了,但是較真的我還是把輸出結果和bc的結算結果比較了一下,沒問題.
接下來我習慣性的到日志中把每個輸出結果進行確認,略一看沒什么不對的地方,仔細一對比,發現日志中納秒級的時間被awk處理后竟然變了.為了進行確認,寫了如下代碼:
輸出結果如下:
對應的二進制數值如下:
發現awk的數值處理范圍超過0X2FFFFFFFFFFFFE(13510798882111486)就不不準確了(為了找這個臨界值,費了一番功夫),他會把0X2FFFFFFFFFFFFF當成0X30000000000000,如果在awk中對0X2FFFFFFFFFFFFF進行減一計算,值沒有任何變化,對0X2FFFFFFFFFFFFE進行加法運算,加1和加2的結果都是0X30000000000000,但是awk又可以顯示/處理更大的數值,從二進制結果中我也沒看出有什么規律可循.有興趣的可以深入源碼層面研究下.
接下來,毅然放棄awk自身的計算功能,選擇awk與bc的結合.于是,把代碼修改成下面的樣子:
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/4532.html