日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解Linux下排序—sort命令

sort 是 Linux 的排序命令,而且可以依據(jù)不同的數(shù)據(jù)類型來進(jìn)行排序。sort 將文件的每一行作為一個(gè)單位,相互比較。比較原則是從首字符向后,依次按 ASCII 碼值進(jìn)行比較,最后將它們按升序輸出。

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、豐鎮(zhèn)ssl等。為1000+企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的豐鎮(zhèn)網(wǎng)站制作公司

安裝

你不必安裝 sort ,因?yàn)樗騺矶及?POSIX 系統(tǒng)里。在大多數(shù) Linux 系統(tǒng)中,sort 命令來自 GNU 組織打包的實(shí)用工具集合中。在其他的 POSIX 系統(tǒng)中,像 BSD 和 Mac,默認(rèn)的 sort 命令不是 GNU 提供的,所以有一些選項(xiàng)可能不一樣。本文中我盡量對(duì) GNU 和 BSD 兩者的實(shí)現(xiàn)都進(jìn)行說明。

按字母順序排列行

sort 命令默認(rèn)會(huì)讀取文件每行的第一個(gè)字符并對(duì)每行按字母升序排序后輸出。兩行中的第一個(gè)字符相同的情況下,對(duì)下一個(gè)字符進(jìn)行對(duì)比。例如:

$ cat distro.list
Slackware
Fedora
Red Hat Enterprise Linux
Ubuntu
Arch
1337
Mint
Mageia
Debian
$ sort distro.list
1337
Arch
Debian
Fedora
Mageia
Mint
Red Hat Enterprise Linux
Slackware
Ubuntu

使用 sort 不會(huì)改變原文件。sort 僅起到過濾的作用,所以如果你希望按排序后的格式保存數(shù)據(jù),你需要用 > 或 tee 進(jìn)行重定向。

$ sort distro.list | tee distro.sorted
1337
Arch
Debian
[...]
$ cat distro.sorted
1337
Arch
Debian
[...]

按列排序

復(fù)雜數(shù)據(jù)集有時(shí)候不止需要對(duì)每行的第一個(gè)字符進(jìn)行排序。例如,假設(shè)有一個(gè)動(dòng)物列表,每個(gè)都有其種和屬,用可預(yù)見的分隔符分隔每一個(gè)“字段”(即數(shù)據(jù)表中的“單元格”)。這類由數(shù)據(jù)表導(dǎo)出的格式很常見,CSV(以逗號(hào)分隔的數(shù)據(jù)comma-separated values)后綴可以標(biāo)識(shí)這些文件(雖然 CSV 文件不一定用逗號(hào)分隔,有分隔符的文件也不一定用 CSV 后綴)。以下數(shù)據(jù)作為示例:

Aptenodytes;forsteri;Miller,JF;1778;Emperor
Pygoscelis;papua;Wagler;1832;Gentoo
Eudyptula;minor;Bonaparte;1867;Little Blue
Spheniscus;demersus;Brisson;1760;African
Megadyptes;antipodes;Milne-Edwards;1880;Yellow-eyed
Eudyptes;chrysocome;Viellot;1816;Southern Rockhopper
Torvaldis;linux;Ewing,L;1996;Tux

對(duì)于這組示例數(shù)據(jù),你可以用 –field-separator (在 BSD 和 Mac 用 -t,在 GNU 上也可以用簡寫 -t )設(shè)置分隔符為分號(hào)(因?yàn)樵撌纠龜?shù)據(jù)中是用分號(hào)而不是逗號(hào),理論上分隔符可以是任意字符),用 –key(在 BSD 和 Mac 上用 -k,在 GNU 上也可以用簡寫 -k)選項(xiàng)指定哪個(gè)字段被排序。例如,對(duì)每行第二個(gè)字段進(jìn)行排序(計(jì)數(shù)以 1 開頭而不是 0):

sort --field-separator=";" --key=2
Megadyptes;antipodes;Milne-Edwards;1880;Yellow-eyed
Eudyptes;chrysocome;Viellot;1816;Sothern Rockhopper
Spheniscus;demersus;Brisson;1760;African
Aptenodytes;forsteri;Miller,JF;1778;Emperor
Torvaldis;linux;Ewing,L;1996;Tux
Eudyptula;minor;Bonaparte;1867;Little Blue
Pygoscelis;papua;Wagler;1832;Gentoo

結(jié)果有點(diǎn)不容易讀,但是 Unix 以構(gòu)造命令的管道方式而聞名,所以你可以使用 column 命令美化輸出結(jié)果。使用 GNU column:

$ sort --field-separator=";" \
\--key=2 penguins.list | column --table --separator ";"
Megadyptes   antipodes   Milne-Edwards  1880  Yellow-eyed
Eudyptes     chrysocome  Viellot        1816  Southern Rockhopper
Spheniscus   demersus    Brisson        1760  African
Aptenodytes  forsteri    Miller,JF      1778  Emperor
Torvaldis    linux       Ewing,L        1996  Tux
Eudyptula    minor       Bonaparte      1867  Little Blue
Pygoscelis   papua       Wagler         1832  Gentoo

對(duì)于初學(xué)者可能有點(diǎn)不好理解(但是寫起來簡單),BSD 和 Mac 上的命令選項(xiàng):

$ sort -t ";" \
-k2 penguins.list | column -t -s ";"
Megadyptes   antipodes   Milne-Edwards  1880  Yellow-eyed
Eudyptes     chrysocome  Viellot        1816  Southern Rockhopper
Spheniscus   demersus    Brisson        1760  African
Aptenodytes  forsteri    Miller,JF      1778  Emperor
Torvaldis    linux       Ewing,L        1996  Tux
Eudyptula    minor       Bonaparte      1867  Little Blue
Pygoscelis   papua       Wagler         1832  Gentoo

當(dāng)然 -k 不一定非要設(shè)為 2。任意存在的字段都可以被設(shè)為排序的鍵。

逆序排列

你可以用 –reverse(BSD/Mac 上用 -r,GNU 上也可以用簡寫 -r)選項(xiàng)來顛倒已經(jīng)排好序的列表。

$ sort --reverse alphabet.list
z
y
x
w
[...]

你也可以把輸出結(jié)果通過管道傳給命令 tac 來實(shí)現(xiàn)相同的效果。

按月排序(僅 GNU 支持)

理想情況下,所有人都按照 ISO 8601 標(biāo)準(zhǔn)來寫日期:年、月、日。這是一種合乎邏輯的指定精確日期的方法,也可以很容易地被計(jì)算機(jī)理解。也有很多情況下,人類用其他的方式標(biāo)注日期,包括用很名字隨意的月份。

幸運(yùn)的是,GNU sort 命令能識(shí)別這種寫法,并可以按月份的名稱正確排序。使用 –month-sort(-M)選項(xiàng):

$ cat month.list
November
October
September
April
[...]
$ sort --month-sort month.list
January
February
March
April
May
[...]
November
December

月份的全稱和簡寫都可以被識(shí)別。

人類可讀的數(shù)字排序(僅 GNU 支持)

另一個(gè)人類和計(jì)算機(jī)的常見混淆點(diǎn)是數(shù)字的組合。例如,人類通常把 “1024 kilobytes” 寫成 “1KB”,因?yàn)槿祟惤馕?“1 KB” 比 “1024” 要容易且更快(數(shù)字越大,這種差異越明顯)。對(duì)于計(jì)算機(jī)來說,一個(gè) 9 KB 的字符串要比諸如 1 MB 的字符串大(盡管 9 KB 是 1 MB 很小一部分)。GNU sort 命令提供了–human-numeric-sort(-h)選項(xiàng)來幫助正確解析這些值。

$ cat sizes.list
2M
12MB
1k
9k
900
7000
$ sort --human-numeric-sort
900
7000
1k
9k
2M
12MB

有一些情況例外。例如,“16000 bytes” 比 “1 KB” 大,但是 sort 識(shí)別不了。

$ cat sizes0.list
2M
12MB
16000
1k
$ sort -h sizes0.list
16000
1k
2M
12MB

邏輯上來說,這個(gè)示例中 16000 應(yīng)該寫成 16 KB,所以也不應(yīng)該全部歸咎于GNU sort。只要你確保數(shù)字的一致性,–human-numeric-sort 可以用一種計(jì)算機(jī)友好的方式解析成人類可讀的數(shù)字。

隨機(jī)排序(僅 GNU 支持)

有時(shí)候工具也提供了一些與設(shè)計(jì)初衷相悖的選項(xiàng)。某種程度上說,sort 命令提供對(duì)一個(gè)文件進(jìn)行隨機(jī)排序的能力沒有任何意義。這個(gè)命令的工作流讓這個(gè)特性變得很方便。你可以用其他的命令,像 shuf ,或者你可以用現(xiàn)在的命令添加一個(gè)選項(xiàng)。不管你認(rèn)為它是一個(gè)臃腫的還是極具創(chuàng)造力的用戶體驗(yàn)設(shè)計(jì),GNU sort 命令提供了對(duì)文件進(jìn)行隨機(jī)排序的功能。

最純粹的隨機(jī)排序格式選項(xiàng)是 –random-sort 或 -R(不要跟 -r 混淆,-r 是 –reverse 的簡寫)。

$ sort --random-sort alphabet.list
d
m
p
a
[...]

每次對(duì)文件運(yùn)行隨機(jī)排序都會(huì)有不同的結(jié)果。


網(wǎng)站欄目:詳解Linux下排序—sort命令
瀏覽地址:http://m.5511xx.com/article/cdhhhci.html