- 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命令脚本时,将对此进行更多介绍。