
- Linux管理員教程
- 首頁
- CentOS概述
- 基本的CentOS Linux命令
- 檔案/資料夾管理
- 使用者管理
- 配額管理
- Systemd服務啟動和停止
- 使用systemctl進行資源管理
- 使用cgroups進行資源管理
- 程序管理
- 防火牆設定
- 在CentOS Linux中配置PHP
- 在CentOS Linux中設定Python
- 在CentOS Linux中配置Ruby
- 為CentOS Linux設定Perl
- 安裝和配置Open LDAP
- 建立SSL證書
- 安裝Apache Web伺服器CentOS 7
- 在CentOS 7上設定MySQL
- 設定Postfix MTA和IMAP/POP3
- 安裝匿名FTP
- 遠端管理
- CentOS中的流量監控
- 日誌管理
- 備份和恢復
- 系統更新
- Shell指令碼
- 包管理
- 卷管理
- Linux管理員有用資源
- Linux管理員 - 快速指南
- Linux管理員 - 有用資源
- Linux管理員 - 討論
Linux管理員 - sort 命令
sort命令針對基於資料型別的排序進行了一些最佳化。此命令將所有檔案的排序連線寫入標準輸出。但是,需要注意的是,對幾個GB的大檔案的複雜排序操作可能會影響系統性能。
當執行具有有限CPU和/或記憶體可用性的生產伺服器時,建議在高峰業務時間將這些較大的檔案解除安裝到工作站進行排序操作。
開關 | 功能 |
---|---|
-b | 忽略開頭的空行 |
-d | 字典順序,只考慮空格和字母數字字元 |
-f | 忽略大小寫,摺疊大小寫字元 |
-g | 常規數值排序 |
-M | 月份排序 |
-h | 人類可讀的數值排序 1KB,1MB,1GB |
-R | 隨機排序 |
-m | 合併已排序的檔案 |
隨意複製下面的表格文字,並按照我們的sort示例進行操作。確保每列都用製表符分隔。
名字 | 姓氏 | 辦公室 |
---|---|---|
Ted | Daniel | 101 |
Jenny | Colon | 608 |
Dana | Maxwell | 602 |
Marian | Little | 903 |
Bobbie | Chapman | 403 |
Nicolas | Singleton | 203 |
Dale | Barton | 901 |
Aaron | Dennis | 305 |
Santos | Andrews | 504 |
Jacqueline | Neal | 102 |
Billy | Crawford | 301 |
Rosa | Summers | 405 |
Kellie | Curtis | 903 |
Matt | Davis | 305 |
Gina | Carr | 902 |
Francisco | Gilbert | 101 |
Sidney | Mack | 901 |
Heidi | Simmons | 204 |
Cristina | Torres | 206 |
Sonya | Weaver | 403 |
Donald | Evans | 403 |
Gwendolyn | Chambers | 108 |
Antonia | Lucas | 901 |
Blanche | Hayes | 603 |
Carrie | Todd | 201 |
Terence | Anderson | 501 |
Joan | Parsons | 102 |
Rose | Fisher | 304 |
Malcolm | Matthews | 702 |
使用sort命令最基本的預設形式:
[root@centosLocal centos]# sort ./Documents/names.txt Aaron Dennis 305 Antonia Lucas 901 Billy Crawford 301 Blanche Hayes 603 Bobbie Chapman 403 Carrie Todd 201 Cristina Torres 206 Dale Barton 901 Dana Maxwell 602 Donald Evans 403 Francisco Gilbert 101 Gina Carr 902 Gwendolyn Chambers 108 Heidi Simmons 204 Jacqueline Neal 102 Jenny Colon 608 Joan Parsons 102 Kellie Curtis 903 Malcolm Matthews 702 Marian Little 903 Matt Davis 305 Nicolas Singleton 203 Rosa Summers 405 Rose Fisher 304 Santos Andrews 504 Sidney Mack 901 Sonya Weaver 403 Ted Daniel 101 Terence Anderson 501 [root@centosLocal centos]#
有時,我們希望根據除第一列以外的其他列對檔案進行排序。可以使用-t和-k開關將sort應用於其他列。
-t : define a file delimiter -k : key count to sort by (think of this as a column specified from the delimiter. -n : sort in numeric order
注意 - 在某些示例中,我們使用了cat管道到grep。這是為了演示管道命令的概念。對於大型檔案,將cat輸出到grep會使系統負載增加數百倍,同時還會增加複雜的排序。這會讓資深的Linux管理員感到痛苦。
現在我們瞭解了管道字元的工作原理,在接下來的章節中將避免這種不好的做法。保持系統資源低的關鍵在於學習如何高效地使用像sort這樣的命令。
[root@centosLocal centos]# sort -t ' ' -k 3n ./Documents/names.txt Ted Daniel 101 Francisco Gilbert 101 Jacqueline Neal 102 Joan Parsons 102 Gwendolyn Chambers 108 Carrie Todd 201 Nicolas Singleton 203 Heidi Simmons 204 Cristina Torres 206 Billy Crawford 301 Rose Fisher 304 Aaron Dennis 305 Matt Davis 305 Bobbie Chapman 403 Donald Evans 403 Sonya Weaver 403 Rosa Summers 405 Terence Anderson 501 Santos Andrews 504 Dana Maxwell 602 Blanche Hayes 603 Jenny Colon 608 Malcolm Matthews 702 Antonia Lucas 901 Dale Barton 901 Sidney Mack 901 Gina Carr 902 Kellie Curtis 903 Marian Little 903 [root@centosLocal centos]#
現在我們的列表按辦公室編號排序。細心的讀者會在-t開關之後注意到一些不尋常的地方;單引號分隔了看起來像是幾個空格的東西。這實際上是傳送到shell的文字製表符。可以使用以下按鍵組合將文字製表符傳送到BASH shell:control+Shift+v。
大多數shell會將Tab鍵解釋為命令。例如,BASH中的自動補全。shell需要一個轉義序列來識別文字製表符。這就是製表符不是Linux分隔符的最佳選擇的原因之一。一般來說,最好避免空格和製表符,因為它們在編寫shell指令碼時可能會導致問題。
讓我們修復我們的names.txt檔案。
[root@centosLocal centos]# sed -i 's/\t/:/g' ./Documents/names.txt && cat ./Documents/names.txt Ted:Daniel:101 Jenny:Colon:608 Dana:Maxwell:602 Marian:Little:903 Bobbie:Chapman:403 Nicolas:Singleton:203 Dale:Barton:901 Aaron:Dennis:305 Santos:Andrews:504 Jacqueline:Neal:102 Billy:Crawford:301 Rosa:Summers:405 Kellie:Curtis:903: Matt:Davis:305 Gina:Carr:902 Francisco:Gilbert:101 Sidney:Mack:901 Heidi:Simmons:204 Cristina:Torres:206 Sonya:Weaver:403 Donald:Evans:403 Gwendolyn:Chambers:108 Antonia:Lucas:901 Blanche:Hayes:603 Carrie:Todd:201 Terence:Anderson:501 Joan:Parsons:102 Rose:Fisher:304 Malcolm: Matthews:702 [root@centosLocal centos]#
現在,處理文字檔案會容易得多。如果有人要求將其轉換回製表符分隔符以用於另一個應用程式(這很常見),我們可以輕鬆完成此任務,如下所示:
sed -i 's/:/\t/g' ./Documents/names.txt
常見的終端使用者應用程式可以很好地使用製表符作為分隔符(會計師不想看到冒號分隔資料列,同時使用電子表格)。因此,學習來回轉換字元是一種良好的實踐;這種情況經常出現。
注意 - 辦公室使用執行在Windows上的具有圖形使用者介面的文字處理器和電子表格。因此,Linux管理員通常擅長完成轉換操作,以適應最終辦公室使用者(大多數情況下,我們的老闆將是終端使用者)。
介紹了一個名為sed的命令。sed是一個流編輯器,可以用作非互動式文字編輯器來操作文字流和檔案。我們稍後將學習更多關於sed的內容。但是,現在請記住,使用sed,我們避免了在更改文字檔案時需要管道多個過濾器命令。從而最大限度地提高了所用工具的效率。
我們還介紹了一個Bash shell運算子:&&。只有當第一個命令以“0”的成功狀態完成時,&&才會執行第二個命令。
[root@centosLocal centos]# ls /noDir && echo "You cannot see me" ls: cannot access /noDir: No such file or directory [root@centosLocal centos]# ls /noDir ; echo "You cannot see me" ls: cannot access /noDir: No such file or directory You cannot see me [root@centosLocal centos]# ls /noDir ; echo "You cannot see me"
在上面的程式碼中,請注意&&和;之間的區別?第一個只有在第一個成功完成時才會執行第二個命令,而;只是將命令連結起來。當我們學習shell命令指令碼時,將對此進行更多介紹。