天天看點

Linux作業系統中排序指令Sort的使用方法

文法格式

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 檔案包含文本:bananaorangePersimmonapple%%bananaappleORANGEsort 指令顯示:%%bananaORANGEPersimmonappleapplebananaorange在 ASCII 整理序列中,%(百分号)在大寫字母前,大寫字母在小寫字母前。如果您目前的語言環境指定 ASCII 之外的字元集,結果可能不同。

要以字典順序排序,請輸入:

sort -d fruits此指令序列排序和顯示 fruits 檔案的内容,并且隻比較字母、數字和空格。如果 fruits 檔案與示例 1 相同,那麼 sort 指令顯示: ORANGEPersimmonappleapple%%bananabananaorange-d 标志忽略 %(百分号)字元,因為它不是個字母、數字或空格。(即 %%banana 被 banana 取代)。

要将包含大寫字母和具有類似小寫行的特殊字元行分組,請輸入:

sort -d -f fruits

-d 标志忽略特殊字元,-f 标志忽略大小寫差異。将 LC_ALL、LC_COLLATE 或 LANG 環境變量設定為 C 的情況下,fruits 檔案的輸出結果變為: appleapple%%bananabananaORANGEorangePersimmon

要除去重複行排序,請輸入:

sort -d -f -u fruits

-u 标志告訴 sort 指令除去重複的行,使檔案中的每一行唯一。此指令序列顯示: apple%%bananaORANGEPersimmon不僅除去重複的 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%%bananabananaORANGEorangePersimmon

要指定分隔字段的字元,請輸入:

sort -t: +1 vegetables

此指令序列排序 vegetables 檔案,對每一行上第一個冒号後的文本進行比較。+1 告訴 sort 指令忽略第一字段,從第二字段的開始到該行的結束進行比較。-t: 标志告訴 sort 指令冒号分隔字段。

如果 vegetables 包含:

yams:104turnips:8potatoes:15carrots:104green beans:32radishes:5lettuce:15那麼,将 LC_ALL、LC_COLLATE 或 LANG 環境變量設定為 C 的情況下,sort 指令将顯示:carrots:104yams:104lettuce:15potatoes:15green beans:32radishes:5turnips:8注意數字沒有按照數字排序。當用字典式分類從左至右比較每一個字元時出現這種情況。換句話說,3 在 5 之前,是以 32 在 5 之前。

要排序數字,請輸入:

sort -t: +1 -n vegetables

此指令序列按照第二個字段對 vegetables 檔案進行數字排序。如果 vegetables 檔案與示例 6 中的相同,那麼 sort 指令将顯示: radishes:5turnips:8lettuce:15potatoes:15green beans:32carrots:104yams: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:5turnips:8potatoes:15lettuce:15green beans:32yams:104carrots:104

此指令按數字順序對行排序。當兩行數字相同時,它們以逆字母順序出現。

要使用排序的文本替換原始檔案,請輸入:

sort -o vegetables vegetables此指令序列将排序輸出存入 vegetables 檔案( -o vegetables)。

繼續閱讀