歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Unix/Liunx sort命令用法詳解

Unix/Liunx sort命令用法詳解

日期:2017/2/28 15:46:54   编辑:Linux教程

sort :
功能說明:將文本文件內容加以排序。
語  法:sort [-bcdfimMnr][-o<輸出文件>][-t<分隔字符>][+<起始欄位>-<結束欄位>][--help][--verison][文件]

補充說明:sort可針對文本文件的內容,以行為單位來排序。
參  數:
-b 忽略每行前面開始出的空格字符。
-c 檢查文件是否已經按照順序排序。
-g 按照一般的數字排序。
-d 排序時,處理英文字母、數字及空格字符外,忽略其他的字符。
-f 排序時,將小寫字母視為大寫字母。
-i 排序時,除了040至176之間的ASCII字符外,忽略其他的字符。
-k 按某列排序,下邊詳講。
-m 將幾個排序好的文件進行合並。
-M 將前面3個字母依照月份的縮寫進行排序。
-n 依照數值的大小排序。
-s 穩定排序,如果對輸入順序有要求的話,這個選項很重要。
-S 限制排序所用的內存。單位:M\G\T\B\E\Z\Y
-o<輸出文件> 將排序後的結果存入指定的文件。
-r 以相反的順序來排序。
-t<分隔字符> 指定排序時所用的欄位分隔字符。
-u 去除重復行。
–help 顯示幫助。
–version 顯示版本信息。

sort默認的會以默認分隔符空格、制表符分隔字段,以第一個字段進行字典序的升序排列,沒有指定輸入文件則從標准輸入獲取數據。

sort選項沒特別需要講的,需要注意的就是-k。-k選項的具體語法格式如下:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
這個語法格式可以被其中的逗號(“,”)分為兩大部分,Start部分和End部分。
如果不設定End部分,那麼就認為End被設定為行尾。Start部分也由三部分組成,其中的Modifier部分就是我們之前說過的類似n和r的選項部分。

我們重點說說Start部分的FStart和C.Start。
C.Start也是可以省略的,省略的話就表示從本域的開頭部分開始。之前例子中的-k 2和-k 3就是省略了C.Start的例子喽。
FStart.CStart,其中FStart就是表示使用的域,而CStart則表示在FStart域中從第幾個字符開始算“排序首字符”。
同理,在End部分中,你可以設定FEnd.CEnd,如果你省略.CEnd,則表示結尾到“域尾”,即本域的最後一個字符。或者,如果你將CEnd設定為0(零),也是表示結尾到“域尾”。

在modifier部分還可以用到的選項:
可以用到b、d、f、i、n 或 r。
其中n和r你肯定已經很熟悉了。
b表示忽略本域的簽到空白符號。
d表示對本域按照字典順序排序(即,只考慮空白和字母)。
f表示對本域忽略大小寫進行排序。
i表示忽略“不可打印字符”,只針對可打印字符進行排序。(有些ASCII就是不可打印字符,比如\a是報警,\b是退格,\n是換行,\r是回車等等)

另外有時候在sort命令後會看到+1 -2這些符號,這是什麼東東?請忽略它,現在手冊也已經沒有這個介紹了,是一種相當古老的用法。

實例:
以第一個關鍵列的第二個字母開始進行排序:
$ sort -k 1.2 file.txt

以關鍵列第一列的第二個字母進行排序,如果第二個字母相同則根據第三列以數值的標准進行降序排列。
$ sort -k 1.2,1.2 -k 3,3nr file.txt

Copyright © Linux教程網 All Rights Reserved