sort 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碼值進行比較,最后將他們按升序輸出。
[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.5sort的-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指定欄位分隔符為冒號-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.txt baidu 100 5000 sohu 100 4500 google 110 5000 guge 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.txt baidu 100 5000 google 110 5000 sohu 100 4500 guge 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.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轉載于:https://www.cnblogs.com/bethal/p/5916803.html
總結
以上是生活随笔為你收集整理的sort uniq命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis_基本类型介绍和指令___2
- 下一篇: hdu1054