Linux中sort和uniq關於排序去重的那些用法


  相信在Linux下對文件操作經常會用到sort和uniq命令,下面系統的介紹一下這兩個命令的用法。

  sort命令是在Linux里非常有用,它將文件進行排序,並將排序結果標准輸出。sort命令既可以從特定的文件,也可以從stdin中獲取輸入。

  語法

  sort(選項)(參數)

  選項

  -b:忽略每行前面開始出的空格字符;   

  -c:檢查文件是否已經按照順序排序;   

  -d:排序時,處理英文字母、數字及空格字符外,忽略其他的字符;   

  -f:排序時,將小寫字母視為大寫字母;   

  -i:排序時,除了040至176之間的ASCII字符外,忽略其他的字符;   

  -m:將幾個排序號的文件進行合並;   

  -M:將前面3個字母依照月份的縮寫進行排序;   

  -n:依照數值的大小排序;   

  -o<輸出文件>:將排序后的結果存入制定的文件;   

  -r:以相反的順序來排序;   

  -t<分隔字符>:指定排序時所用的欄位分隔字符;   

  +<起始欄位>-<結束欄位>:以指定的欄位來排序,范圍由起始欄位到結束欄位的前一欄位。

  參數

  文件:指定待排序的文件列表。

  實例

  sort將文件/文本的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進行比較,最后將他們按升序輸出。

  [root@mail text]# cat sort.txt   

  aaa:10:1.1   

  ccc:30:3.3   

  ddd:40:4.4   

  bbb:20:2.2   

  eee:50:5.5   

  eee:50:5.5   

  [root@mail text]# sort sort.txt   

  aaa:10:1.1   

  bbb:20:2.2   

  ccc:30:3.3   

  ddd:40:4.4   

  eee:50:5.5   

  eee:50:5.5

  忽略相同行使用-u選項或者uniq

  [root@mail text]# cat sort.txt   

  aaa:10:1.1   

  ccc:30:3.3   

  ddd:40:4.4   

  bbb:20:2.2   

  eee:50:5.5   

  eee:50:5.5   

  [root@mail text]# sort -u sort.txt   

  aaa:10:1.1   

  bbb:20:2.2   

  ccc:30:3.3   

  ddd:40:4.4   

  eee:50:5.5   

  或者   

  [root@mail text]# uniq sort.txt   

  aaa:10:1.1   

  ccc:30:3.3   

  ddd:40:4.4   

  bbb:20:2.2   

  eee:50:5.5

  sort的-n、-r、-k、-t選項的使用:

  [root@mail text]# cat sort.txt   

  AAA:BB:CC   

  aaa:30:1.6   

  ccc:50:3.3   

  ddd:20:4.2   

  bbb:10:2.5   

  eee:40:5.4   

  eee:60:5.1   

  #將BB列按照數字從小到大順序排列:   

  [root@mail text]# sort -nk 2 -t: sort.txt   

  AAA:BB:CC   

  bbb:10:2.5   

  ddd:20:4.2   

  aaa:30:1.6   

  eee:40:5.4   

  ccc:50:3.3   

  eee:60:5.1   

  #將CC列數字從大到小順序排列:   

  [root@mail text]# sort -nrk 3 -t: sort.txt   

  eee:40:5.4   

  eee:60:5.1   

  ddd:20:4.2   

  ccc:50:3.3   

  bbb:10:2.5   

  aaa:30:1.6   

  AAA:BB:CC   

  # -n是按照數字大小排序,-r是以相反順序,-k是指定需要愛排序的欄位,-t指定欄位分隔符為冒號

 

  uniq命令用於報告或忽略文件中的重復行,一般與sort命令結合使用。

  語法

  uniq(選項)(參數)

  選項

  -c或——count:  在每列旁邊顯示該行重復出現的次數;   

  -d或--repeated:  僅顯示重復出現的行列;   

  -f<欄位>或--skip-fields=<欄位>:忽略比較指定的欄位;   

  -s<字符位置>或--skip-chars=<字符位置>:忽略比較指定的字符;   

  -u或——unique:僅顯示出一次的行列;   

  -w<字符位置>或--check-chars=<字符位置>:指定要比較的字符。

  實例

  刪除重復行:

  uniq file.txt   

  sort file.txt | uniq   

  sort -u file.txt

  只顯示單一行:

  uniq -u file.txt   

  sort file.txt | uniq -u

  統計各行在文件中出現的次數:

  sort file.txt | uniq -c

  在文件中找出重復的行:

  sort file.txt | uniq -d

 

  利用sort和uniq求兩個文件的並集,交集和差集

  並集:cat file1.txt file2.txt | sort | uniq > file.txt

  交集:cat file1.txt file2.txt | sort | uniq -d >file.txt

  差集:求file1.txt相對於file2.txt的差集,可先求出兩者的交集temp.txt,然后在file1.txt中除去temp.txt即可。

     cat file1.txt file2.txt | sort | uniq -d >temp.txt

     cat file1.txt temp.txt | sort | uniq -u >file.txt




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM