linux shell 工具---sort
来源:互联网 发布:淘宝的售后时间是多久 编辑:程序博客网 时间:2024/05/16 11:32
- 常规操作
- sort 去重
- shell反向排序
- sort输出
- sort按照数字排序
- kt组合
- sort进阶操作
- -k命令
- 常规操作
在处理请求或者日志文件等等,通过排序的方能使我们得到一个更加只管的输出。sort就是这么一个常用而又强大的工具。
sort是以行为单位,按照每一个字符的ACSII码来进行排序。sort的语法是:
sort [option]... [file]...
本文简述sort的几个常用操作,详细操作请man sort
。
常规操作
sort [-u][-r][-o][-n] [-k][-t] file
是不是看的眼花缭乱的,没关系我们一个一个来。
➜ shell cat sortTest.txtdcba➜ shell sort sortTest.txtabcd➜ shell
sort 去重
去重的意思就是去除相同行(仅保留一行),其实这是比较浅显的解释,sort在去重的时候会按照sort的规则去比较两行,如果发现在这个规则下相等,则去掉一行。sort默认的规则是从第一个字符到最后一个字符的比较。因此此可以去掉相同内容的行。
➜ shell cat sortTest.txt d c c c b a a ➜ shell sort -u sortTest.txt a b c d
可以看到无论两行三行,都给我统统消失。
shell反向排序
之前我们介绍的sort功能都是按照ASCII的升序排列,如果使用-r选项,则可以按照其降序排列
➜ shell sort -ur sortTest.txt d c b a
sort输出
很容易理解,当我们需要将sort的结果输出到一个文件中时,我们通常会使用sort a.txt > b.txt
不过遗憾的是,不能够将排序后文件输出到原来的文件中:sort a.txt > a.txt
。sort -o 选项就应运而生了(不过很可惜这也是-o的唯一作用,个人感觉还是>
更好用)。
➜ shell sort -ur sortTest.txtdcba➜ shell sort -ur sortTest.txt > sortTest.txt➜ shell cat sortTest.txt
直接使用>
可以看到文件将被清空。
➜ shell cat sortTest.txtdcba➜ shell sort -ur sortTest.txt -o sortTest.txt➜ shell cat sortTest.txtdcba
sort按照数字排序
很明显,仅仅是按照ASCII排序是远远不满足我们的需求,比如我们会遇到10<2的情况(这是什么原因呢?因为按照ascii比较,第一个字符小的就排在前面了):
➜ shell cat number.txt102➜ shell sort number.txt102
下面我们按照数字来进行排序:
➜ shell sort -n number.txt210
此时2排在了前面。
kt组合
通常来说-k -t 选项是一起操作的。
比如说我们有这样一个素材:
➜ shell cat score.txtA:5:2B:2:4C:1:6
表示A、B、C对于PHP和C的使用频率。使用’:’分割。此时我们需要借助-k-t选项来进行排序。
其中-t用于指定分隔符,-k用于指定比较的列(是分割之后的列)
➜ shell sort -k 2 -t : score.txtC:1:6B:2:4A:5:2➜ shell sort -k 3 -t : score.txtA:5:2B:2:4C:1:6
sort进阶操作
所谓进阶操作无非就是将普通操作细化,需要了解更多的规则,当然也可以满足更多的需求。
-k命令
-k命令我们之前提到是对列进行排序的约定。其实-k命令的完整语法是:
-k [ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
如果觉得混乱了,不要着急。慢慢解释。
在解释之前要记住:
- 没有设定End的时候,默认到行尾。
- 靠前的Fstar优先级高于靠后的。
我们都知道-k和-t是配合使用的。我们使用-t来分割每一行得到的各个小部分我们称为一个域(field)。
所以,FStar表示的是选择哪个域。在一个域中,我们需要考虑从哪个元素开始,至哪个元素结束,这就是CStart。通过指定开始和结束的元素就可以指定我们排序的区域。
modifier表示,我们排序后的一个操作,r,u等等。
比如:仅仅使用第一个域的第一个元素排序:
sort -k 1.1,1.1 -t ' ' file
第一个域的第一个元素到第一个域的第三个元素,如果相同。按照第二个域第一个元素排序
sort -k 1.1,1.3 -k 2.1,2.1 -t ' ' file
例子:
原始材料:
➜ shell cat company.txtfacebook 1300 4000linkedIn 2000 5433amazon 1200 3900apple 3000 7000google 3000 6667
本人伪造了一些公司的资料,分别表示公司名字,员工数量,工资。
下面按照公司名字的第二个字母排序:
➜ shell sort -k 1.2 -t ' ' company.txtfacebook 1300 4000linkedIn 2000 5433amazon 1200 3900google 3000 6667apple 3000 7000
可以看到facebook排到了第一。
下面我们按照公司名称的第一个字母排序,如果遇到相同的就按照员工数量排序:
➜ shell sort -t ' ' -k 1.1,1.1 -k 3nr company.txtapple 3000 7000amazon 1200 3900facebook 1300 4000google 3000 6667linkedIn 2000 5433
- linux shell 工具---sort
- sort,linux,shell命令
- linux shell sort
- linux shell sort用法
- Linux shell工具grep awk cut sort uniq sort 使用小结
- linux工具命令--sort
- LINUX SHELL之SORT命令
- Linux Shell sort排序常用命令
- Linux shell之sort命令
- Linux Shell之sort命令
- Linux Shell之sort命令
- Linux Shell之sort命令
- Linux Shell之sort命令
- Linux Shell之sort命令
- Linux Shell之sort命令
- Linux Shell sort排序常用命令
- Linux Shell sort排序常用命令
- Linux Shell sort排序常用命令
- Becky!客户端Hotmail/outlook邮箱设置方法
- 我读Faster R-CNN
- 要么读书,要么健身,要么恋爱(八)小王子
- NIVIDA提示你必须先安装intel@驱动程序
- M102: MongoDB for DBAs - Chapter 5: Replication Part 2
- linux shell 工具---sort
- android ListView/Recyclerview滚动时自动调用onCheckedChanged导致CheckBox状态混乱的解决办法
- TIJ读书笔记03-初始化和构造器
- PAT乙级.1047. 编程团体赛(20)
- BFS广度优先搜索
- Openwrt的docs目录下编译生成openwrt.pdf、openwrt.html、openwrt.css文档
- iOS开发之Swift与OC混编实现
- 2016校招真题汇总3:扑克牌大小
- 【C】C语言中读取整形和浮点型的格式说明符