shell命令之sort

來源:互聯網
上載者:User

標籤:http   os   使用   ar   strong   檔案   art   div   sp   

[Shell學習筆記] sort、uniq命令對文本進行排序、單一和重複操作文章目錄[隱藏]
  • sort命令文法
    • 常用選項
    • sort常見用法
  • uniq命令
    • 命令選項
    • uniq用法

sort是在Linux裡非常常用的一個命令,它將檔案進行排序,並將排序結果標準輸出。sort命令既可以從特定的檔案,也可以從stdin中擷取輸入。

sort命令文法
sort 選項 參數
常用選項
  • -b:忽略每行前面開始處的空白字元;
  • -c:檢查檔案是否已經按照順序排序,排序過為真;
  • -d:排序時,處理英文字母、數字和空白字元,以字典順序排序。忽略其他所有字元;
  • -f:排序時,將小寫字母視為大寫字母;
  • -i:排序時,處理040~176之間的ASCII字元,忽略其他所有字元;
  • -m:將幾個排序好的檔案進行合并;
  • -M:將前面3個字母按月份的縮寫進行排序;
  • -n:按照數值大小進行排序;
  • -o outfile.txt:將排序後的結果存入outfile.txt;
  • -r:以相反的順序進行排序;
  • -k:指定需要排序的列數(欄數);
  • -t 分隔字元:指定排序時所用到的欄位分隔字元;
  • + 起始欄位 - 結束欄位:以指定的欄位來排序,範圍從起始欄位到結束欄位的前一欄位。(古老的用法)
sort常見用法

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

[[email protected] text]# cat sort.txtaaa:10:1.1ccc:30:3.3ddd:40:4.4bbb:20:2.2eee:50:5.5eee:50:5.5[[email protected] text]# sort sort.txtaaa:10:1.1bbb:20:2.2ccc:30:3.3ddd:40:4.4eee:50:5.5eee:50:5.5

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

[[email protected] text]# cat sort.txtaaa:10:1.1ccc:30:3.3ddd:40:4.4bbb:20:2.2eee:50:5.5eee:50:5.5[[email protected] text]# sort -u sort.txtaaa:10:1.1bbb:20:2.2ccc:30:3.3ddd:40:4.4eee:50:5.5或者[[email protected] text]# uniq sort.txtaaa:10:1.1ccc:30:3.3ddd:40:4.4bbb:20:2.2eee:50:5.5

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

[[email protected] text]# cat sort.txtAAA:BB:CCaaa:30:1.6ccc:50:3.3ddd:20:4.2bbb:10:2.5eee:40:5.4eee:60:5.1#將BB列按照數字從小到大順序排列:[[email protected] text]# sort -nk 2 -t: sort.txtAAA:BB:CCbbb:10:2.5ddd:20:4.2aaa:30:1.6eee:40:5.4ccc:50:3.3eee:60:5.1#將CC列數字從大到小順序排列:[[email protected] text]# sort -nrk 3 -t: sort.txteee:40:5.4eee:60:5.1ddd:20:4.2ccc:50:3.3bbb:10:2.5aaa:30:1.6AAA:BB:CC# -n是按照數字大小排序,-r是以相反順序,-k是指定需要愛排序的欄位,-t指定欄位分隔字元為冒號

-k選項的具體文法格式:

-k選項的文法格式:

FStart.CStart Modifie,FEnd.CEnd Modifier-------Start--------,-------End-------- FStart.CStart 選項  ,  FEnd.CEnd 選項

這個文法格式可以被其中的逗號(“,”)分為兩大部分,Start部分和End部分。Start部分也由三部分組成,其中的Modifier部分就是我們之前說過的類似n和r的選項部分。我們重點說說Start部分的FStart和C.Start。C.Start也是可以省略的,省略的話就表示從本域的開頭部分開始。FStart.CStart,其中FStart就是表示使用的域,而CStart則表示在FStart域中從第幾個字元開始算“排序首字元”。同理,在End部分中,你可以設定FEnd.CEnd,如果你省略.CEnd,則表示結尾到“域尾”,即本域的最後一個字元。或者,如果你將CEnd設定為0(零),也是表示結尾到“域尾”。

從公司英文名稱的第二個字母開始進行排序:

$ sort -t ‘ ‘ -k 1.2 facebook.txtbaidu 100 5000sohu 100 4500google 110 5000guge 50 3000

使用了-k 1.2,表示對第一個域的第二個字元開始到本域的最後一個字元為止的字串進行排序。你會發現baidu因為第二個字母是a而名列榜首。sohu和 google第二個字元都是o,但sohu的h在google的o前面,所以兩者分別排在第二和第三。guge只能屈居第四了。

只針對公司英文名稱的第二個字母進行排序,如果相同的按照員工工資進行降序排序:

$ sort -t ‘ ‘ -k 1.2,1.2 -nrk 3,3 facebook.txtbaidu 100 5000google 110 5000sohu 100 4500guge 50 3000

由於只對第二個字母進行排序,所以我們使用了-k 1.2,1.2 的表示方式,表示我們“只”對第二個字母進行排序。(如果你問“我使用-k 1.2怎麼不行?”,當然不行,因為你省略了End部分,這就意味著你將對從第二個字母起到本域最後一個字元為止的字串進行排序)。對於員工工資進行排 序,我們也使用了-k 3,3,這是最準確的表述,表示我們“只”對本域進行排序,因為如果你省略了後面的3,就變成了我們“對第3個域開始到最後一個域位置的內容進行排序” 了。

uniq命令

uniq命令常用語報告或者消除檔案中的重複內容,一般與sort命令結合使用。

命令選項
  • -c:在每行開頭顯示重複行出現的次數;
  • -d:僅顯示重複的列;
  • -f 欄位:忽略指定的欄;
  • -s N:指定可以跳過前N個字元;
  • -w 字元位元:指定用於比較的最大字元數;
  • -u:僅顯示出現一次的行列;
uniq用法

重複資料刪除行:

uniq file.txtsort file.txt | uniqsort -u file.txt

只顯示單一行:

uniq -u file.txtsort file.txt | uniq -u

統計各行在檔案中出現的次數:

sort file.txt | uniq -c

在檔案中找出重複的行:

sort file.txt | uniq -d

shell命令之sort

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.