uniq處理全角字符時的問題

一個進程運行了整整一天還沒結束,本來應該只需要半天左右就可以全部build完成了,一步一步查原因,發現在uniq處理全角字符的問題上。

先看下面這個現象

[root@localhost build]$ cat text 
12580
10086
20086
580
008
5
8
[root@localhost build]$ uniq text
12580
580
5
[root@localhost build]$
這個輸出,明顯不是想要的,這主要是全角字符所帶來的問題

在很多數據處理時,可能數據都是來源於用戶的輸入,所以這時一些全角字符或者是大小寫不一致的問題,就隨處可見了,大小寫的問題很容易想到要處理,全角字符也是需要處理或者設置處理環境的。

uniq命令在判斷兩個字符串是否相等的時候,和LC_ALL這個環境變量是有很大關係的,如果將其設置爲UTF8,那麼有可能一些不同的字符被判斷爲相同的。我們可以把這個環境變量的值設置爲C,這樣的話uniq就會一個一個字節的對兩個字符串進行比較,這也是我們想要的結果和方式。

如下:

[root@localhost build]$ export LC_ALL=C
[root@localhost build]$ uniq text
12580
10086
20086
580
008
5
8
[root@localhost build]$

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章