linux sort 函數

sort命令是在Linux裏很是有用,它將文件進行排序,並將排序結果標準輸出。sort命令既能夠從特定的文件,也能夠從stdin中獲取輸入。

來自: http://man.linuxde.net/sortlinux

-------------------------------------------------sql

sort [參數][參數] filebash

選項:app

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

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

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

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

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

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

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

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

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

-r:以相反的順序來排序; -t<分隔字符>:指定排序時所用的欄位分隔字符;

-u:忽略相同行使用 (uniq file = sort -u file)

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

k的用法:google

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(零),也是表示結尾到「域尾」。   

舉例:spa

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

$ 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個域開始到最後一個域位置的內容進行排序」 了。

如今 咱們來舉幾個簡單的例子:.net

#將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命令

uniq命令經常使用語報告或者消除文件中的重複內容,通常與sort命令結合使用。unix

命令選項

  • -c:在每行開頭顯示重複行出現的次數;
  • -d:僅顯示重複的列;
  • -f 欄位:忽略指定的欄;
  • -s N:指定能夠跳過前N個字符;
  • -w 字符位數:指定用於比較的最大字符數;
  • -u:僅顯示出現一次的行列;

uniq用法

刪除重複行:日誌

uniq file.txt
sort file.txt | uniq
sort -u file.txt

只顯示單一行:code

uniq -u file.txt
sort file.txt | uniq -u

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

sort file.txt | uniq -c

在文件中找出重複的行:

sort file.txt | uniq -d

unix/liunx uniq詳解   uniq:
 功能說明:檢查及刪除文本文件中重複出現的行列。

語 法:uniq [-cdu][-f<欄位>][-s<字符位置>][-w<字符位置>] [--help][--version][輸入文件][輸出文件]

補充說明:uniq可檢查文本文件中重複出現的行列。

注意: uniq所認爲的重複行是指連續出現的重複行!      

參 數:   -c或--count   在每列旁邊顯示該行重複出現的次數。  

-d或--repeated   僅顯示重複出現的行列。  

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

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

-u或--unique   僅顯示出一次的行列。  

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

--help   顯示幫助。  

--version   顯示版本信息。  

[輸入文件]   指定已排序好的文本文件。

[輸出文件]   指定輸出的文件。  

咱們看日誌的時候,能夠先用-s或-f跳過日期,再去掉重複行。

 

用uniq命令能夠刪除相鄰的重複行:
uniq [file]
但若是一文本中有重複卻不相鄰的行則沒法刪除,須要結合sort命令:
sort [file]|uniq
等效的sort命令是:
sort -u [file]
另外uniq命令有4個有用的選項:

$uniq -d file 只輸出file中的重複行,且只輸出一次,但不輸出惟一的行
$uniq -u file 只輸出file中的惟一行(固然是一次啦)
$uniq -c file 在每行前顯示重複次數,可與其餘選項結合,例如-cu或-cd或-c
$uniq -i file 比較時忽略大小寫

-d 的結果和-u 的結果合併起來就是uniq的結果了。

[root@AY140417160054681ae5Z ~]# cat >seq.txt  

  1. banana  
  2. apple  
  3. pear  
  4. orange  
  5. banana 

[root@AY140417160054681ae5Z ~]# sort seq.txt | uniq -c  

  1. 1 apple  
  2. 2 banana  
  3. 2 orange  
  4. 1 pear  
相關文章
相關標籤/搜索