語法格式
sort [ -A ] [ -b ] [ -c ] [ -d ] [ -f ] [ -i ] [ -m] [ -n ] [ -r ] [ -u ] [ -o OutFile ]
[ -t Character ] [ -T Directory ] [ -y [ Kilobytes ] ] [ -z RecordSize ] [ [ + [ FSkip ]
[ .CSkip ] [ b ] [ d ] [ f ] [ i ] [ n ] [ r ] ] [ - [ FSkip ] [ .CSkip ] [ b ] [ d ] [ f ]
[ i ] [ n ] [ r ] ] ] [ -k KeyDefinition ] [檔案 ]
使用說明
sort 命令對 File 引數指定的檔案中的行排序,並將結果寫到標準輸出。如果 File 引數指定多個檔案,
那麼 sort 命令將這些檔案連線起來,並當作一個檔案進行排序。-(減號)代替檔名指定標準輸入。
如果您不指定任何檔名,那麼該命令對標準輸入排序。可以使用 -o 標誌指定輸出檔案。
如果不指定任何標誌,sort 命令基於當前語言環境的整理順序對輸入檔案的所有行排序。
主要引數
-A 使用 ASCII 整理順序代替當前語言環境的整理順序在逐位元組的基礎上排序。
-b 忽略前導空格和製表符,找出欄位的第一或最後列。
-c 檢查輸入是否已按照標誌中指定的排序規則進行排序。如果輸入檔案排序不正確,就返回一個非零值。
-d 使用字典順序排序。比較中僅考慮字母、數字和空格。
-f 比較前將所有小寫字母改成大寫字母。
-i 比較中忽略所有非顯示字元。
-k KeyDefinition 指定排序關鍵字。KeyDefinition 選項的格式為:
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
排序關鍵字包括所有以 FStart 變數指定的欄位和 CStart 變數指定的列開頭的字元及以 FEnd 變數指定的欄位和
CEnd 變數指定的列結束的字元。Modifier 變數的值可以是 b、d、f、i、n 或 r。修飾符與同一字母的標誌等價。
-m 只合並多個輸入檔案;假設輸入檔案已經排序。
-n 按算術值對數字欄位排序。數字欄位可包含前導空格、可選減號、十進位制數字、千分位分隔符和可選基數符。
對包含任何非數字字元的欄位進行數字排序會出現無法預知的結果。
-o OutFile 將輸出指向 OutFile 引數指定的檔案,而不是標準輸出。OutFile 引數值可以與 File 引數值相同。
-r 顛倒指定排序的順序。
-t Character 指定 Character 為單一的欄位分隔符。
-u 禁止按照排序關鍵字和選項的所有等同排序(每一組行中一行除外)。
-T Directory 將建立的所有臨時檔案放入 Directory 引數指定的目錄中。
-y[Kilobytes] 用 Kilobytes 引數指定的主儲存的千位元組數啟動 sort 命令,並根據需要增加儲存量。
(如果 Kilobytes 引數指定的值小於最小儲存站點或大於最大儲存站點,就以這個最小儲存站點或最大儲存站點取代)。
如果省略 -y 標誌,sort 命令以預設的儲存大小啟動。
-y0 標誌用最小儲存啟動,而 -y 標誌(不帶 Kilobytes 值)用最大儲存啟動。sort 命令使用的儲存量顯著地影響效能。
以大儲存量對小檔案排序將很浪費。
-z RecordSize 如果正在排序的任一行大於預設的緩衝區大小,要防止出現異常終止。
指定 -c 或 -m 標誌時,省略排序階段,使用系統的預設緩衝大小。如果已排序行超出這一大小,排序異常終止。
-z 選項指定排序階段最長行的記錄,因而可在合併階段分配足夠的緩衝區。
RecordSize 必須指明等於或大於要合併的最長行的位元組值。
應用例項
- 要在 LC_ALL、LC_COLLATE 或 LANG 環境變數設定為 En_US 的情況下排序 fruits 檔案,請輸入:
LANG=En_US sort fruits
此命令序列顯示以升序詞典順序排序的 fruits 檔案的內容。每一列的字元,包括空格、數字和特殊字元都經一一比較。
例如,如果 fruits 檔案包含文字:
banana
orange
Persimmon
apple
%%banana
apple
ORANGE
sort 命令顯示:
%%banana
ORANGE
Persimmon
apple
apple
banana
orange
在 ASCII 整理序列中,%(百分號)在大寫字母前,大寫字母在小寫字母前。
如果您當前的語言環境指定 ASCII 之外的字符集,結果可能不同。
sort -d fruits
此命令序列排序和顯示 fruits 檔案的內容,並且只比較字母、數字和空格。
如果 fruits 檔案與示例 1 相同,那麼 sort 命令顯示:
ORANGE
Persimmon
apple
apple
%%banana
banana
orange
-d 標誌忽略 %(百分號)字元,因為它不是個字母、數字或空格。(即 %%banana 被 banana 取代)。
- 要將包含大寫字母和具有類似小寫行的特殊字元行分組,請輸入:
sort -d -f fruits
-d 標誌忽略特殊字元,-f 標誌忽略大小寫差異。
將 LC_ALL、LC_COLLATE 或 LANG 環境變數設定為 C 的情況下,fruits 檔案的輸出結果變為:
apple
apple
%%banana
banana
ORANGE
orange
Persimmon
sort -d -f -u fruits
-u 標誌告訴 sort 命令除去重複的行,使檔案中的每一行唯一。此命令序列顯示:
apple
%%banana
ORANGE
Persimmon
不僅除去重複的 apple,而且也除去了 banana 和 ORANGE。
除去這些是因為 -d 標誌忽略 %% 這個特殊字元,-f 標誌忽略大小寫差異。
- 要如上面那樣排序,除去重複的例項(除非是大寫字母或標點不同),請輸入:
sort -u +0 -d -f +0 fruits
輸入 +0 -d -f 完成的排序與示例 3 中 -d -f 的排序型別相同,+0 進行另一項比較以區分不一樣的行。
這防止 -u 標誌將它們除去。
示例 1 所示的 fruits 檔案中,新增的 +0 將 %%banana 與 banana 及 ORANGE 與 orange 區分開來。
然而,apple 的兩個例項是相同的,所以其中之一被刪除。
apple
%%banana
banana
ORANGE
orange
Persimmon
sort -t: +1 vegetables
此命令序列排序 vegetables 檔案,對每一行上第一個冒號後的文字進行比較。
+1 告訴 sort 命令忽略第一欄位,從第二欄位的開始到該行的結束進行比較。-t: 標誌告訴 sort 命令冒號分隔欄位。
如果 vegetables 包含:
yams:104
turnips:8
potatoes:15
carrots:104
green beans:32
radishes:5
lettuce:15
那麼,將 LC_ALL、LC_COLLATE 或 LANG 環境變數設定為 C 的情況下,sort 命令將顯示:
carrots:104
yams:104
lettuce:15
potatoes:15
green beans:32
radishes:5
turnips:8
注意數字沒有按照數字排序。當用字典式分類從左至右比較每一個字元時出現這種情況。
換句話說,3 在 5 之前,所以 32 在 5 之前。
sort -t: +1 -n vegetables
此命令序列按照第二個欄位對 vegetables 檔案進行數字排序。
如果 vegetables 檔案與示例 6 中的相同,那麼 sort 命令將顯示:
radishes:5
turnips:8
lettuce:15
potatoes:15
green beans:32
carrots:104
yams:104
sort -t: +1 -2 -n +0 -1 -r vegetables
或
sort -t: -k2,2 n -k1,1 r vegetables
此命令序列對第二欄位(+1 -2 -n)進行數字排序。在這個順序中,它以逆字母順序(+0 -1 -r)對第一欄位排序。
將 LC_ALL、LC_COLLATE 或 LANG 環境變數設定為 C 的情況下,輸出將類似於:
radishes:5
turnips:8
potatoes:15
lettuce:15
green beans:32
yams:104
carrots:104
此命令按數字順序對行排序。當兩行數字相同時,它們以逆字母順序出現。
sort -o vegetables vegetables
此命令序列將排序輸出存入 vegetables 檔案( -o vegetables)。
以第2個欄位作為排序關鍵字對檔案example的內容進行排序。
$ sort +1-2 example
對於file1和file2檔案內容反向排序,結果放在outfile中,利用第2個欄位的第一個字元作為排序關鍵字。
$ sort -r -o outfile +1.0 -1.1 example
sort排序常用於在管道中與其他命令連用,組合完成比較複雜的功能,如利用管道將當前工作目錄中的檔案送給sort進行排序,排序關鍵字是第6個至第8個欄位。
$ ls - l | sort +5 - 7
sort命令也可以對標準輸入進行操作。例如,如果您想把幾個檔案文字行合併,並對合並後的文字行進行排序,您可以首先用命令cat把多個檔案合併,然
後用管道操作把合併後的文字行輸入給命令sort,sort命令將輸出這些合併及排序後的文字行。在下面的例子中,檔案veglist與檔案
fruitlist的文字行經過合併與排序後被儲存到檔案clist中。
$ cat veglist fruitlist | sort > clist