最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

在命令行用 sort 進(jìn)行排序的方法

 更新時(shí)間:2019年12月09日 10:49:59   作者:Seth Kenlon  
這篇文章主要介紹了在命令行用 sort 進(jìn)行排序的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

Linux sort命令用于將文本文件內(nèi)容加以排序。

sort可針對(duì)文本文件的內(nèi)容,以行為單位來(lái)排序。

在 Linux、BSD 或 Mac 的終端中使用 sort 命令,按自己的需求重新整理數(shù)據(jù)。

如果你曾經(jīng)用過(guò)數(shù)據(jù)表應(yīng)用程序,你就會(huì)知道可以按列的內(nèi)容對(duì)行進(jìn)行排序。例如,如果你有一個(gè)費(fèi)用列表,你可能希望對(duì)它們進(jìn)行按日期或價(jià)格升序抑或按類別進(jìn)行排序。如果你熟悉終端的使用,你不會(huì)僅為了排序文本數(shù)據(jù)就去使用龐大的辦公軟件。這正是 sort 命令的用處。

安裝

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

按字母順序排列行

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ì)改變?cè)募?。sort 僅起到過(guò)濾的作用,所以如果你希望按排序后的格式保存數(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ù)見(jiàn)的分隔符分隔每一個(gè)“字段”(即數(shù)據(jù)表中的“單元格”)。這類由數(shù)據(jù)表導(dǎo)出的格式很常見(jiàn),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 上也可以用簡(jiǎn)寫 -t )設(shè)置分隔符為分號(hào)(因?yàn)樵撌纠龜?shù)據(jù)中是用分號(hào)而不是逗號(hào),理論上分隔符可以是任意字符),用 --key(在 BSD 和 Mac 上用 -k,在 GNU 上也可以用簡(jiǎn)寫 -k)選項(xiàng)指定哪個(gè)字段被排序。例如,對(duì)每行第二個(gè)字段進(jìn)行排序(計(jì)數(shù)以 1 開(kāi)頭而不是 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)不好理解(但是寫起來(lái)簡(jiǎ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 上也可以用簡(jiǎn)寫 -r)選項(xiàng)來(lái)顛倒已經(jīng)排好序的列表。

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

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

按月排序(僅 GNU 支持)

理想情況下,所有人都按照 ISO 8601 標(biāo)準(zhǔn)來(lái)寫日期:年、月、日。這是一種合乎邏輯的指定精確日期的方法,也可以很容易地被計(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

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

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

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

$ 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

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

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

有時(shí)候工具也提供了一些與設(shè)計(jì)初衷相悖的選項(xiàng)。某種程度上說(shuō),sort 命令提供對(duì)一個(gè)文件進(jìn)行隨機(jī)排序的能力沒(méi)有任何意義。這個(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 的簡(jiǎn)寫)。

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

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

結(jié)語(yǔ)

GNU 和 BSD 的 sort 命令還有很多功能,所以花點(diǎn)時(shí)間去了解這些選項(xiàng)。你會(huì)驚異于 sort 的靈活性,尤其是當(dāng)它和其他的 Unix 工具一起使用時(shí)。

總結(jié)

以上所述是小編給大家介紹的在命令行用 sort 進(jìn)行排序的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
如果你覺(jué)得本文對(duì)你有幫助,歡迎轉(zhuǎn)載,煩請(qǐng)注明出處,謝謝!

相關(guān)文章

  • Commitizen來(lái)規(guī)范代碼提交信息使用技巧

    Commitizen來(lái)規(guī)范代碼提交信息使用技巧

    這篇文章主要為大家介紹了Commitizen來(lái)規(guī)范代碼提交信息使用技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 滑動(dòng)窗口算法高效率解決數(shù)組問(wèn)題

    滑動(dòng)窗口算法高效率解決數(shù)組問(wèn)題

    這篇文章主要為大家介紹了滑動(dòng)窗口算法高效率解決數(shù)組問(wèn)題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • 教你JVM怎么使用native memory

    教你JVM怎么使用native memory

    這篇文章主要為大家介紹了JVM怎么使用native memory原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 通過(guò)自定義字段重新排序 WordPress 文章方法

    通過(guò)自定義字段重新排序 WordPress 文章方法

    在本文中,我將向您展示如何通過(guò)自定義字段更改文章的順序。WordPress 中文章的默認(rèn)順序基于發(fā)布日期,并按時(shí)間倒序顯示。這意味著它將在頂部顯示最新的文章。
    2021-09-09
  • MASA?Blazor入門詳細(xì)教程

    MASA?Blazor入門詳細(xì)教程

    MASA?Blazor是一個(gè)基于?Blazor?Component?和?Material?Design?的?UI?組件庫(kù),接下來(lái)通過(guò)本文給大家介紹MASA?Blazor入門詳細(xì)教程,感興趣的朋友一起看看吧
    2022-04-04
  • HTTP協(xié)議詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    HTTP協(xié)議詳解_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了HTTP協(xié)議詳解,超文本傳輸協(xié)議(HTTP)是一種通信協(xié)議,它允許將超文本標(biāo)記語(yǔ)言(HTML)文檔從Web服務(wù)器傳送到客戶端的瀏覽器
    2017-07-07
  • GitLab使用外部提供的Redis緩存數(shù)據(jù)庫(kù)的方法詳解

    GitLab使用外部提供的Redis緩存數(shù)據(jù)庫(kù)的方法詳解

    這篇文章主要介紹了GitLab: 如何使用外部提供的Redis緩存數(shù)據(jù)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • idea一直indexing無(wú)法操作的問(wèn)題解決

    idea一直indexing無(wú)法操作的問(wèn)題解決

    在使用idea 2020.3版本開(kāi)發(fā)maven項(xiàng)目的時(shí)候,一直出現(xiàn)有效件index,idea基本上就沒(méi)辦法操作了,連跳入到類或方法里都跳不了,本文就來(lái)介紹一下解決方法,感興趣的可以了解一下
    2024-01-01
  • Git提交代碼詳細(xì)流程及問(wèn)題總結(jié)

    Git提交代碼詳細(xì)流程及問(wèn)題總結(jié)

    這篇文章主要介紹了Git的三大分區(qū),分別是工作區(qū)、暫存區(qū)和版本庫(kù),并詳細(xì)描述了提交、推送、拉取代碼和合并分支的流程,文中通過(guò)代碼介紹的非常詳解,需要的朋友可以參考下
    2025-02-02
  • vscode使用editorconfig插件以及.editorconfig配置文件說(shuō)明詳解

    vscode使用editorconfig插件以及.editorconfig配置文件說(shuō)明詳解

    這篇文章主要介紹了vscode使用editorconfig插件以及.editorconfig配置文件說(shuō)明詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04

最新評(píng)論

顺昌县| 福贡县| 宝兴县| 巢湖市| 嘉黎县| 青河县| 阿图什市| 徐汇区| 神木县| 平谷区| 财经| 台中市| 台北县| 英吉沙县| 丹凤县| 宁南县| 竹溪县| 文成县| 岳阳市| 山阴县| 麦盖提县| 沙坪坝区| 巩义市| 临海市| 岫岩| 聂拉木县| 区。| 东台市| 岐山县| 桂平市| 巩留县| 阳信县| 河西区| 江门市| 山阴县| 溆浦县| 板桥市| 泽州县| 禹州市| 喜德县| 黔西|