文章目录
- 前言
- 使用Sort命令文本排序
- sort命令的选项如下:
- 基本排序
- 对单个指定列进行排序
- 对多个指定列进行排序
- 删除重复的行
- 结语
前言
shell脚本通常用作一些自动化的操作,但是在有些场景下例如科研运算,有时候会产生大量的运算结果文件,我们就需要对这些结果文件进行分析和统计,下面就一起看看如何使用shell对数据进行排序和统计
使用Sort命令文本排序
在linux系统中涉及到排序的问题都是使用sort
命令进行排序,sort的基本语法如下:
# option 是可选的,默认对第一列按字典顺序排序
sort [option] [file]
sort命令的选项如下:
选项 | 说明 |
---|---|
-b | 忽略前导空格或者制表符,找出第一个非空格字符。 |
-c | 测试文件是否已经排序。 |
-d | 根据字典顺序排序。该选项仅比较数字、字母和空格等字符。 |
-f | 忽略大小写。将小写字母转成大写字母后参与比较。 |
-i | 仅仅比较可打印字符。 |
-n | 根据算术值进行比较,参与比较的字符有空格、十进制数字,以及减号等。如果对非数值字符进行算术值比较,将会产生无法预知的结果。 |
-R | 根据哈希值随机排序。 |
-r | 颠倒排序结果。 |
-k | 定义排序关键字。 |
-m | 仅仅合并已经排好序的文件,不执行排序操作。 |
-o | 将排序结果写入文件,而不是标准输出设备。 |
-t | 指定字段分隔符。默认值为空格。 |
-u | 删除重复的行,只保留第一个。 |
现在我们使用这个demo.txt文件,进行各种排序的演示,demo.txt 是一份成绩单,内容如下:
cat demo.txt
# 第一列姓名 第二列分数 第三列级别
zhangsan 85 A
lisi 96 A
wangwu 65 B
tom 58 C
jerry 100 A
基本排序
使用sort命令,不加任何参数,进行基本排序,基本排序的规则是对第一列进行字典顺序升序,代码如下:
sort demo.txt
结果如下:可以看到是针对第一列姓名进行排序
对单个指定列进行排序
在有些情况下,我们是对某一列进行排序,例如对于成绩单,我们想按照分数从高到底排序,命令如下:
# sort默认是按照字段顺序也就是字符串的顺序排列
# -n 申明排序的列是数值型的,按数字大小排序
# -r 默认是升序,我们需要降序从高到低
# -k 指定按第二列进行排序
sort -nr -k 2 demo.txt
对多个指定列进行排序
有时候我们需要对多个列进行排序,例如成绩单中,我们想先对级别进行排序,然后在按照分数排序,注意,这里首先是按照第三列按字典升序排序,然后对第二列按照数值降序排序,示例如下:
# 对多列进行排序可以使用多个 -k
# -k 对第三列进行字典升序排序(默认就是字典升序排序)
# -k 对第二列进行数值降序(n 代表按数值排序,r代表降序)
sort -k 3,3 -k 2,2nr demo.txt
删除重复的行
有时我们的文件内存在大量重复的数据,利用sort命令我们可以很方便的去重,示例如下:
我们有demo2.txt文件,内容如下:
对demo2.txt文件进行排序,如下:
可以看到有两行是重复的,下面进行去重:
# -u 代表对文件进行去重
sort -u demo2.txt
结果如下:
可以看到结果里以及没有重复的行了。
结语
关于sort排序的内容就先介绍这么多,后面的文章会介绍其他的文本处理工具 ,如果我们在工作和学习中能用好这些工具,将会大大的提高我们的效率。