shell学习(5)- 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

原文地址:https://www.cnblogs.com/kumufengchun/p/10162357.html

时间: 2024-07-31 02:31:49

shell学习(5)- sort的相关文章

shell命令之sort

[Shell学习笔记] sort.uniq命令对文本进行排序.单一和重复操作 文章目录 [隐藏] sort命令语法 常用选项 sort常见用法 uniq命令 命令选项 uniq用法 sort是在Linux里非常常用的一个命令,它将文件进行排序,并将排序结果标准输出.sort命令既可以从特定的文件,也可以从stdin中获取输入. sort命令语法 sort 选项 参数 常用选项 -b:忽略每行前面开始处的空格字符: -c:检查文件是否已经按照顺序排序,排序过为真: -d:排序时,处理英文字母.数字

【转】十分有用的linux shell学习总结

在最近的日常工作中由于经常会和Linux服务器打交道,如Oracle性能优化.我们 数据采集服务器的资源利用率监控,以及Debug服务器代码并解决其效率和稳定性等问题.因此这段时间总结的有关Linux Shell的系列博客就给予了我极大的帮助,然而在实际的使用中却发现,有的时候确实忘记了某个技术点或某个Shell命令的使用方式曾经在哪一篇博客中 予以了说明,所以不得不多次点击多篇博客,直到找到想要那篇的为止,鉴于此,为了方便我们每个人的查阅,这里特别给出了前十二篇系列博客的目录以供大家参 阅和查

第五章 shell学习之文件的排序、合并和分割

sort命令 sort [选项] [输入文件] 选项: -c 测试文件是否已经排序,如果未被排序则输出第一个未被排序的记录 -k 指定排序的域 -m 合并两个已排序的文件,合并的文件也已经排序,如sort -m a1 a2,a1的记录被有序的插入a2 -n 根据数字的大小进行排序,一般放在域号后,如-k3n -o 将输出重定向到指定文件 -r 将排序结果逆向显示 -t 改变域分割符,如-t: -u 去除结果中的重复行 sort和awk联合 例: [[email protected] tmp]#

Shell学习之Shell特性(一)

Shell学习之Shell特性 目录 命令和文件自动补齐功能 命令历史记忆功能 history.上下键.!number.!string.!$.!! 别名功能 alias.unalias cp.~username/.bashrc.\cp -rf /etc/hosts 快捷键 ^R ^D ^A ^E ^L ^U ^K ^S ^Q 前后台作业控制 输入输出重定向 输入与输出 管道 | tee 命令排序 命令和文件自动补齐功能 这个不说了,我们在输入命令的时候,按tab键补全. 命令历史记忆功能  hi

shell学习之tr命令

tr命令不接受指定的文件参数,而只是对标准输入进行翻译, tr是translate的简写,亦即翻译,需要注意的是,它不能翻译句子,只能翻译单个字符. 首先,定义变量:     [[email protected]]#A=1,,2,,,3,,,4,,,5 下面以示例对该命令以及其常用选项进行介绍. 示例: 1.  无选项设置情况     [[email protected]]# echo $A | tr  ',' ' '         1 2   3   4   5     [[email pr

shell学习总结之自定义函数

shell学习总结之自定义函数 Myfun (){ echo patams1 is $1 echo -n "now i is $i " ! [ "$i" ] && exit ; echo jj return '1' } myf=$(Myfun); echo myf Myfun 12 unset Myfun Myfun echo 'the end !'$myf 别人的 #! bin/bash # ----------------------------

第八章 shell学习之循环和结构化命令

for循环 1. 列表for循环 for variable in {list}  #有些像C++/CLR中的for each do ... done 如: 1. [[email protected] tmp]# cat b.sh #! /bin/bash for i in 1 2 3 4 5      #1 2 3 4 5等价于{1..5} do echo $i done [[email protected] tmp]# ./b.sh 1 2 3 4 5 2. [[email protected

Shell学习笔记——第三章

第三章 /etc/passwd 文件包含一个所有系统用户账户组成的列表,以及一些关于每个用户的基本信息. 例rich:x:501:Rich Blum:/home/rich:/bin/bash 每个条目都有7个数据字段,例使用冒号分隔.系统使用这些字段中的数据向用户分配具体的特性.这些字段分别有 用户名:用户密码(如果密码存储在其他文件中,则为占位符):用户的系统用户ID编号:用户的系统组的ID编号:用户的全名:用户默认的主目录:用户的默认Shell目录: cd 命令 略过 列表命令(ls) 参数

Shell学习之:输入输出重定向

详细理解: linux命令默认从标准输入设备(stdin)获取输入,将结果输出到标准输出设备(stdout)显示.一般情况下,标准输入设备就是键盘,标准输出设备就是终端,即显示器.在linux shell执行命令时,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名: 文件描述符说明列表 文件 文件描述符 输入文件-标准输入 0(缺省为键盘;0为文件或其他命令的输出) 输出文件-标准输出 1(缺省为屏幕;1为文件) 错误

第三章 shell学习之正则表达式

正则表达式 \<the\>:精确匹配the,不包括包含the的单词 [^b-d]:不包含b~d a\{2\}:a出现2次 a\{2,3\}:a出现2~3次 a\{2,\}:a至少出现2次 [:upper:]:大写字母(用的时候外面加一层[]表示匹配字符集合) [:lower:]:小写字母 [:digit:]:数字 [:alnum:]:大小写字母和数字 [:space:]:表示空格或tab键 [:alpha:]:大小写字母 通配 注意通配和正则表达式不同,虽然有共同的符号 ls -l *.sh