Linux uniq 遇到不同字元 被算在一起的解法

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

  1. vim unicode.txt # 塞入下述內容
































  2. cat unicode.txt | uniq -c # 全部只有被算到一筆
    33 ═
  3. 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

  1. vim .bashrc # 加入下述
    alias uniq='LC_ALL=C uniq'
  2. source .bashrc
  3. cat unicode.txt | uniq # 都會是正常的囉~

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料