shell编程系列(6)-使用Sort进行数据排序

文章目录

  • 前言
  • 使用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

结果如下:可以看到是针对第一列姓名进行排序
shell编程系列(6)-使用Sort进行数据排序_第1张图片

对单个指定列进行排序

在有些情况下,我们是对某一列进行排序,例如对于成绩单,我们想按照分数从高到底排序,命令如下:

# sort默认是按照字段顺序也就是字符串的顺序排列
# -n 申明排序的列是数值型的,按数字大小排序
# -r 默认是升序,我们需要降序从高到低
# -k 指定按第二列进行排序
sort -nr -k 2 demo.txt

shell编程系列(6)-使用Sort进行数据排序_第2张图片

对多个指定列进行排序

有时候我们需要对多个列进行排序,例如成绩单中,我们想先对级别进行排序,然后在按照分数排序,注意,这里首先是按照第三列按字典升序排序,然后对第二列按照数值降序排序,示例如下:

# 对多列进行排序可以使用多个 -k 
# -k 对第三列进行字典升序排序(默认就是字典升序排序)
# -k 对第二列进行数值降序(n 代表按数值排序,r代表降序)
 sort -k 3,3 -k 2,2nr demo.txt 

shell编程系列(6)-使用Sort进行数据排序_第3张图片

删除重复的行

有时我们的文件内存在大量重复的数据,利用sort命令我们可以很方便的去重,示例如下:
我们有demo2.txt文件,内容如下:
shell编程系列(6)-使用Sort进行数据排序_第4张图片
对demo2.txt文件进行排序,如下:
shell编程系列(6)-使用Sort进行数据排序_第5张图片
可以看到有两行是重复的,下面进行去重:

# -u 代表对文件进行去重
sort -u demo2.txt

结果如下:
shell编程系列(6)-使用Sort进行数据排序_第6张图片
可以看到结果里以及没有重复的行了。

结语

关于sort排序的内容就先介绍这么多,后面的文章会介绍其他的文本处理工具 ,如果我们在工作和学习中能用好这些工具,将会大大的提高我们的效率。

你可能感兴趣的:(shell编程,linux,linux,shell编程,排序)