文法格式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 參數指定的主儲存的KB數啟動 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 |