2012-12-16 93 views
2

我寫了一些awk腳本來處理一些數據,發現結果出乎意料。如何嚴格比較awk中的兩個長數字串

我找到了根本原因是下面的字符串比較是不正確

echo "59558711052462309110012 59558711052462313120012"|awk '{print $1;print $2;print ($1==$2)?"eq":"ne"}' 

結果是

59558711052462309110012 
59558711052462313120012 
eq 

我猜的原因是,AWK把兩個數字串數字,並切斷它們進行比較。 我的問題是,如何嚴格比較awk中的兩個字符串。

回答

3

強制告訴awk中的操作數的至少一個是一個字符串,通過連接操作數與空字符串的字符串比較:

echo "59558711052462309110012 59558711052462313120012"| 
awk '{print $1;print $2;print ($1""==$2)?"eq":"ne"}' 
59558711052462309110012 
59558711052462313120012 
ne 
+0

沒有意識到這一點。 –

+0

所以awk會做數字比較,如果我沒有連接操作數與空字符串和切斷操作數,如果長度超過? – ningyuwhut

+0

沒有修改,awk會試圖找出是否需要數字或字符串比較。只要雙方「看起來像」(通過awks推理)數字,比較將是數字,否則它將是字符串。 idk什麼'如果長度超過'意味着切斷操作數。 –