Linux sort 命令詳解

來源:互聯網
上載者:User

 

Linux sort 命令詳解 2007-06-23 02:34

文法格式
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
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.