Linux面試指令---sort指令

sort 命令

       同文本文件打交道時,總避不開排序,那是因爲對於文本處理任務而言,排序(sort)可以起到不小的作用。sort 命令能夠幫助我們對文本文件和 stdin 進行排序操作。通常,它會結合其他命令來生成所需要的輸出。

(1)命令格式

         sort [選項] [文件名]

(2)常用參數

參數 描述
-n 基於字符串的長度來排序,使用此選項允許根據數字值排序,而不是字母值
-k 指定排序關鍵字
-b 默認情況下,對整行進行排序,從每行的第一個字符開始。這個選項導致 sort 程序忽略每行開頭的空格,從第一個非空白字符開始排序
-m 只合並多個輸入文件
-r 按相反順序排序,結果按照降序排列,而不是升序
-t 自定義分隔符,默認爲製表符

(3)常用範例

         例一:列出/usr/share/目錄下使用空間最多的前 10 個目錄文件,可以使用如下命令:

du -s /usr/share/* | sort -nr | head -10

         du -s /usr/share/* 命令顯示/usr/share/目錄下所有文件和目錄的磁盤使用空間,目錄包含目錄下的子目錄和文件

       例二:ls 命令能顯示目錄下文件的詳細信息,包含空間使用大小,但與 du 命令不同的是,ls 命令不計算目錄下的子目錄和文件的大小。ls 顯示格式如下:

-rwxrwxrwx   1  root   root  542  11 月   29  test.php

現在想要對 ls 命令輸出信息中的空間使用大小字段進行排序,可以使用如下命令:

ls -l /usr/bin/ | sort -nr -k 5 | head -10

        例三:首先來看下下面的例子:

由於 11 由 1 開始,比 5 小,所以排在 5 的前面。這時排序可以通過自定義排序字段來排序。使用下面的命令就可以解決。

sort  -k 1,1  -k 2n data.txt

       第一個-k 選項指明只對第一個字段排序,1,1 意味着“始於並且結束於第一個字段”。 第二個-k 選項 2n 表示對第二個字段按數值排序。 還有一種格式,如-k 3.4n,表示始於第三個字段的第四個字符,按數值排序。

-k 選項的語法格式如下:

[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

這個語法格式可以被其中的逗號(“,”)分爲兩大部分,Start 部分和 End 部分。

先給你灌輸一個思想,那就是“如果不設定 End 部分,那麼就認爲 End 被設定爲行尾”。這個概念很重要的,但往往你不會重視它。

Start 部分也由三部分組成,其中的 Modifier 部分就是類似 n 和 r 的選項部分。我們重點說說 Start 部分的 FStart 和 CStart。 FStart.CStart,其中 FStart 就是表示使用的域,而 CStart 則表示在 FStart 域中從第幾個字符開始算“排序首字符”。CStart 是可以省略的,省略的話就表示從本域的開頭部分開始。之前例子中的-k 5 就是省略了 CStart 的例子。

同理,在 End 部分中,你可以設定 FEnd.CEnd,如果你省略.CEnd,則表示結尾到“域尾”,即本域的最後一個字符。或者,如果你將 CEnd 設定爲 0(零),也是表示結尾到“域尾”。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章