sort(分類)用法
sort -cmu -o output_file [other options] +pos1 +pos2 input_files
n n爲域號。在分類比較時忽略此域,一般與+n一起使用。
post1 傳遞到m,n。m爲域號,n爲開始分類字符數;例如4,6意即以第5域分類,從第7個字符開始。
- o選項保存分類結果,然而也可以使用重定向方法保存。下面例子保存結果到results.out:
=========================================
下面是文件video的清單,包含了上個季度家電商場的租金情況。各域爲:
(1)名稱,(2)供貨區代碼,(3)本季度租金,(4)本年租金。
域分隔符爲冒號,爲此對此例需使用‘-t’選項。文件如下:
[root@Linuxsvr lab]# cat video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
=========================================
缺省情況下,sort認爲“一個空格”或“一系列空格”爲“分隔符”。要加入其他方式分隔,使用-t(-t+分隔符)選項,如:
[root@Linuxsvr lab]# sort -t: video
A Few Good Men :KL :445 :5851
Boys in Company C :HK :192 :2192
先查看是否爲域分隔設置了- t選項,如果設置了- t選項,則使用分隔符將記錄分隔成 域0、域1、域2、域3等等;
缺省時sort以每行第一個字符將整個行排序,也可以指定域號,這樣就會按照指定的域優先進行排序,
關於sort的一個重要事實是它參照第一個域作爲域0,域1是第二個域,等等。sort也可以使用整行作爲分類依據。
=========================================
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
=========================================
怎樣分辨文件是否已分類?如果只有30行,看看就知道了,但如果是400行呢,使用sort -c查看sort文件是否按某種順序分類。
[root@Linuxsvr lab]# sort -c video
sort: video:2: disorder: Alien :HK :119 :1982
結果顯示未分類,現在將video分類,並存爲2.video
[root@Linuxsvr lab]# sort -t: video >2.video
[root@Linuxsvr lab]# sort -c 2.video
沒有任何錯誤提示,返回提示符表明已分類。然而如果測試成功,返回一個信息行會更好。
最基本的sort方式爲sort filename,按第一域進行分類(分類鍵0)。實際上讀文件時sort操作將行中各域進行比較,
[root@Linuxsvr lab]# sort -t: video
A Few Good Men :KL :445 :5851
Boys in Company C :HK :192 :2192
如果要逆向sort結果,使用- r選項。在通讀大的註冊文件時,使用逆向sort很方便。下面是按域0分類的逆向結果。
[root@Linuxsvr lab]# sort -t: -r video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
有時需要只按第2域(分類鍵1)分類。這裏爲重排 報文中“供應區代碼”,使用t 1,意義爲按分類鍵1分類。
注意分類鍵2和3對應各域也被分類。因爲第2域有重複,sort會再重複的情況下優先考慮下一個域的順序。而且是按照第一個字符分類,並不是
按照整個數值大小分類63小於445,卻被排到後面,因爲第一個字符是6,大於4。
[root@Linuxsvr lab]# sort -t: +1 video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
依此類推,要按第三域(第二分類鍵)分類,使用t 2。但是因爲這是數值域,即爲數值分類,可以使用- n選項。下面例子爲按季度租金分類命
[root@Linuxsvr lab]# sort -t: +2n video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
使用-n選項是按照數值大小進行排列的,不使用-n選項是按照數字位排列,先看最左邊第一位大小,如果第一位相同再看第二位大小
[root@Linuxsvr lab]# sort -t: +2 video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
[root@Linuxsvr lab]# sort -t: +2nr video
A Few Good Men :KL :445 :5851
Boys in Company C :HK :192 :2192
有時,原文件中有重複行,這時可以使用- u選項進行唯一性(不重複)分類以去除重複行,下例中A l i e n有相同的兩行。帶重複行的文件
[root@Linuxsvr lab]# cat video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
使用- u選項去除重複行,不必加其他選項, sort會自動處理。
[root@Linuxsvr lab]# sort -u video
A Few Good Men :KL :445 :5851
Boys in Company C :HK :192 :2192
[root@Linuxsvr lab]# sort video
A Few Good Men :KL :445 :5851
Boys in Company C :HK :192 :2192
sort還有另外一些方法指定分類鍵。可以指定k選項,第1域(分類鍵)以1開始。不要與前面相混淆。其他選項也可以使用k,主要用於指定分
The keydef argument is a restricted sort key field definition. The format of this definition is:
[root@Linuxsvr lab]# sort -t: -k[field_start[type][,field_end[type]]] video
[root@Linuxsvr lab]# sort -t: -k2,2 -k1,1 video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
如果不指定結束域,分類將會按照後面的域以次排序。如果上面的例子不指定-k2,2後面結束域,結果如下:
[root@Linuxsvr lab]# sort -t: -k2 -k1,1 video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
上面的例子不會再以第一域排序,而是按照第二域排序,如果第二域有重複,優先考慮第三域,如果再有重複,考慮第四域,而不是第一域。
可以指定分類鍵次序。再全部將結果反向排序,方法如下:
[root@Linuxsvr lab]# sort -t: -k2,2 -k1,1 -r video
A Few Good Men :KL :445 :5851
Boys in Company C :HK :192 :2192
[root@Linuxsvr lab]# sort -t: -k2,2 -k1,1 video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851
下面的例子把Aliens改爲Bliens,先對第三域反向排序,重複的地方再按照第一域正向排。
[root@Linuxsvr lab]# sort -t: +2nr -k1,1 video
A Few Good Men :KL :445 :5851
Boys in Company C :HK :192 :2192
下面例子是先對第三域 正向排,重複的地方再按照第一域反向排
[root@Linuxsvr lab]# sort -t: +2n -k1,1 -r video
Boys in Company C :HK :192 :2192
A Few Good Men :KL :445 :5851