shell学习- sort
Posted 枯木逢春
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell学习- sort相关的知识,希望对你有一定的参考价值。
Linux sort命令用于将文本文件内容加以排序。
sort可针对文本文件的内容,以行为单位来排序。
参数如下:
-b 忽略每行前面开始出的空格字符。 -c 检查文件是否已经按照顺序排序。 -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。 -f 排序时,将小写字母视为大写字母。 -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。 -m 将几个排序好的文件进行合并。 -M 将前面3个字母依照月份的缩写进行排序。 -n 依照数值的大小排序。 -o<输出文件> 将排序后的结果存入指定的文件。 -r 以相反的顺序来排序。 -k 指定以哪一列来排序。
-u 去重。 -t<分隔字符> 指定排序时所用的栏位分隔字符。 +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。 --help 显示帮助。 --version 显示版本信息。
1.sort直接用就可以对文件进行排序
准备测试文件 [[email protected] ~]$ cat sorttest.txt hello java php world betty php [[email protected] ~]$ sort sorttest.txt betty hello java php php world
2.sort -u的选项是去重,在输出行中去除重复行
[[email protected] ~]$ sort -u sorttest.txt betty hello java php world
3.sort -n 选项是按照数值大小排序,这样就不会出现10出现在2之前了
准备个文件 [[email protected] ~]$ cat num.txt 8 9 1 2 10 20 如果直接排序,结果如下 [[email protected] ~]$ sort num.txt 1 10 2 20 8 9 要想按照数值大小排序,需要加-n选项 [[email protected] ~]$ sort -n num.txt 1 2 8 9 10 20
4.sort -o 选项把结果输出到指定文件中,用重定向命令也是可以的
[[email protected] ~]$ sort -n -o test num.txt [[email protected] ~]$ cat test 1 2 8 9 10 20 或者直接如下 [[email protected] ~]$ sort -n num.txt > test [[email protected] ~]$ cat test 1 2 8 9 10 20
5.sort的-t选项指定分隔符
这个文件有三列,列与列之间用“-”隔开了,第一列表示年,第二列表示月,第三列表示日。那么我想以月来排序,也就是以第二列来排序,如何利用sort实现?幸好,sort提供了-t选项,后面可以设定间隔符。指定了间隔符之后,就可以用-k来指定列数了。
准备文件 [[email protected] ~]$ cat date 2018-12-22 2016-11-11 2017-04-11 2019-08-07 如果直接排序的话,结果如下 [[email protected] ~]$ sort date 2016-11-11 2017-04-11 2018-12-22 2019-08-07 如果以第二列月份排序的话,如下 [[email protected] ~]$ sort -n -k2 -t‘-‘ date 2017-04-11 2019-08-07 2016-11-11 2018-12-22
6.sort -k选项是指定以哪一列来排序
准备测试文件如下 [[email protected] ~]$ cat company facebook 50 5000 alibaba 100 3000 tengxun 80 4000 baidu 150 2000 google 200 1000 如果直接排序,是以第一列的字母排序 [[email protected] ~]$ sort company alibaba 100 3000 baidu 150 2000 facebook 50 5000 google 200 1000 tengxun 80 4000 第一列排序还可以指定第一列 [[email protected] ~]$ sort -k1 company alibaba 100 3000 baidu 150 2000 facebook 50 5000 google 200 1000 tengxun 80 4000 [[email protected] ~]$ sort -k1 -t‘ ‘ company alibaba 100 3000 baidu 150 2000 facebook 50 5000 google 200 1000 tengxun 80 4000 如果以第二列数值大小排序 [[email protected] ~]$ sort -k2n -t‘ ‘ company facebook 50 5000 tengxun 80 4000 alibaba 100 3000 baidu 150 2000 google 200 1000
改下文件,如果第二列相同,按第三列大小排序,如何操作?
[[email protected] ~]$ cat company facebook 50 5000 alibaba 50 3000 tengxun 80 4000 baidu 150 2000 google 200 1000 [[email protected] ~]$ sort -k2n -t‘ ‘ -k3n company alibaba 50 3000 facebook 50 5000 tengxun 80 4000 baidu 150 2000 google 200 1000
如果第二列相同,第三列降序排序,如何操作呢?
[[email protected] ~]$ sort -k2n -t‘ ‘ -k3nr company facebook 50 5000 alibaba 50 3000 tengxun 80 4000 baidu 150 2000 google 200 1000
如果-k 和 -u 联合使用,有什么效果呢?
[[email protected] ~]$ sort -n -k2 company alibaba 50 3000 facebook 50 5000 tengxun 80 4000 baidu 150 2000 google 200 1000 [[email protected] ~]$ sort -n -k2 -u company facebook 50 5000 tengxun 80 4000 baidu 150 2000 google 200 1000
发现第二列相同的alibaba删除掉了
7.sort -M选项,按月份的前三个缩写字母来排序
[[email protected] ~]$ cat month DEC JAN NOV AUG MAY [[email protected] ~]$ sort -M month JAN MAY AUG NOV DEC
8.sort -r选项是逆序排列
[[email protected] ~]$ cat sorttest.txt hello java php world betty php [[email protected] ~]$ sort -r sorttest.txt world php php java hello betty
以上是关于shell学习- sort的主要内容,如果未能解决你的问题,请参考以下文章
shell脚本学习总结----cut+sort+uniq+tr+find+dd+file