Linux CLI 要計算一個檔案內,行數相同字串的重複次數,通常就是 sort 再 uniq -c 計算。
平常計算都是正常的,但是若遇到編碼種類比較多元,有些長角的 a、o.. 會跟一般英文字母的 a、o 算在一起,當然案例還有更多舉不完。
Linux uniq 遇到不同字元 被算在一起的解法
遇到這種不同字元算在一起的解法,就是將編碼回歸 LC_ALL=C 來處理。
- cat example.txt | LC_ALL=C uniq
在此篇文章的範例就很明顯:Linux Shell Util uniq Unicode Bug
- vim unicode.txt # 塞入下述內容
═
═
═
║
║
║
╒
╓
╔
╕
╖
╗
╘
╙
╚
╛
╜
╝
╞
╟
╠
╡
╢
╣
╤
╥
╦
╧
╨
╩
╪
╫
╬ - cat unicode.txt | uniq -c # 全部只有被算到一筆
33 ═ - cat a.txt | LC_ALL=C uniq -c # 分開計算
3 ═
3 ║
1 ╒
1 ╓
1 ╔
1 ╕
1 ╖
1 ╗
1 ╘
1 ╙
1 ╚
1 ╛
1 ╜
1 ╝
1 ╞
1 ╟
1 ╠
1 ╡
1 ╢
1 ╣
1 ╤
1 ╥
1 ╦
1 ╧
1 ╨
1 ╩
1 ╪
1 ╫
1 ╬
可以直接的將此設定寫入 .bashrc
- vim .bashrc # 加入下述
alias uniq='LC_ALL=C uniq' - source .bashrc
- cat unicode.txt | uniq # 都會是正常的囉~