Linux 的”sort”命令的七個有趣例項

linux.cn發表於2015-05-05

上一篇文章裡,我們已經探討了關於sort命令的多個例子,如果你錯過了這篇文章,可以點選下面的連結進行閱讀。今天的這篇文章作為上一篇文章的繼續,將討論關於sort命令的剩餘用法,與上一篇一起作為Linux ‘sort’命令的完整指南。

Linux 的 'sort'命令的七個有趣例項(二)

在我們繼續深入之前,先建立一個文字文件‘month.txt’,並且將上一次給出的資料填進去。

$ echo -e "mar/ndec/noct/nsep/nfeb/naug" > month.txt
$ cat month.txt

Linux 的 'sort'命令的七個有趣例項(二)

15、 通過使用’M‘選項,對’month.txt‘檔案按照月份順序進行排序。

$ sort -M month.txt

注意:‘sort’命令需要至少3個字元來確認月份名稱。

Linux 的 'sort'命令的七個有趣例項(二)

16、 把資料整理成方便人們閱讀的形式,比如1K、2M、3G、2T,這裡面的K、G、M、T代表千、兆、吉、梯。 (LCTT 譯註:此處命令有誤,ls 命令應該增加 -h 引數,徑改之)

$ ls -lh /home/$USER | sort -h -k5

Linux 的 'sort'命令的七個有趣例項(二)

17、 在上一篇文章中,我們在例子4中建立了一個名為‘sorted.txt’的檔案,在例子6中建立了一個‘lsl.txt’。‘sorted.txt’已經排好序了而’lsl.txt‘還沒有。讓我們使用sort命令來檢查兩個檔案是否已經排好序。

$ sort -c sorted.txt

Linux 的 'sort'命令的七個有趣例項(二)

如果它返回0,則表示檔案已經排好序。

$ sort -c lsl.txt

Linux 的 'sort'命令的七個有趣例項(二)

報告無序。存在矛盾……

18、 如果文字之間的分隔符是空格,sort命令自動地將空格後的東西當做一個新文字單元,如果分隔符不是空格呢?

考慮這樣一個文字檔案,裡面的內容可以由除了空格之外的任何符號分隔,比如‘|’,‘/’,‘+’,‘.’等……

建立一個分隔符為+的文字檔案。使用‘cat‘命令檢視檔案內容。

$ echo -e "21+linux+server+production/n11+debian+RedHat+CentOS/n131+Apache+Mysql+PHP/n7+Shell Scripting+python+perl/n111+postfix+exim+sendmail" > delimiter.txt
$ cat delimiter.txt

Linux 的 'sort'命令的七個有趣例項(二)

現在基於由數字組成的第一個域來進行排序。

$ sort -t '+' -nk1 delimiter.txt

Linux 的 'sort'命令的七個有趣例項(二)

然後再基於非數字的第四個域排序。

Linux 的 'sort'命令的七個有趣例項(二)

如果分隔符是製表符,你需要在’+‘的位置上用$’/t’代替,如上例所示。

19、 對主使用者目錄下使用‘ls -l’命令得到的結果基於第五列(‘檔案大小’)進行一個亂序排列。

$ ls -l /home/avi/ | sort -k5 -R

Linux 的 'sort'命令的七個有趣例項(二)

每一次你執行上面的指令碼,你得到結果可能都不一樣,因為結果是隨機生成的。

正如我在上一篇文章中提到的規則2所說——sort命令會將以小寫字母開始的行排在大寫字母開始的行前面。看一下上一篇文章的例3,字串‘laptop’在‘LAPTOP’前出現。

20、 如何覆蓋預設的排序優先權?在這之前我們需要先將環境變數LC_ALL的值設定為C。在命令列提示欄中執行下面的程式碼。

$ export LC_ALL=C

然後以非預設優先權的方式對‘tecmint.txt’檔案重新排序。

$ sort tecmint.txt

Linux 的 'sort'命令的七個有趣例項(二)

覆蓋排序優先權

不要忘記與example 3中得到的輸出結果做比較,並且你可以使用‘-f’,又叫‘-ignore-case’(忽略大小寫)的選項來獲取更有序的輸出。

$ sort -f tecmint.txt

Linux 的 'sort'命令的七個有趣例項(二)

21、 給兩個輸入檔案進行‘sort‘,然後把它們連線成一行!

我們建立兩個文字文件’file1.txt‘以及’file2.txt‘,並用資料填充,如下所示,並用’cat‘命令檢視檔案的內容。

$ echo -e “5 Reliable/n2 Fast/n3 Secure/n1 open-source/n4 customizable” > file1.txt
$ cat file1.txt

Linux 的 'sort'命令的七個有趣例項(二)

用如下資料填充’file2.txt‘。

$ echo -e “3 RedHat/n1 Debian/n5 Ubuntu/n2 Kali/n4 Fedora” > file2.txt
$ cat file2.txt

Linux 的 'sort'命令的七個有趣例項(二)

現在我們對兩個檔案進行排序並連線。

$ join <(sort -n file1.txt) <(sort file2.txt)

Linux 的 'sort'命令的七個有趣例項(二)

我所要講的全部內容就在這裡了,希望與各位保持聯絡,也希望各位經常來逛逛。有反饋就在下面評論吧。

相關文章