一、功能:
sort命令可以针对文本文件内容,以行为单位来排序,可以通过选项的使用来满足我们以想要的排序方式来排序
二、常用选项:
| 选项 | 说明 |
|---|---|
| -b | 忽略每行前面的空白区域 |
| -d | 只考虑处理空格和字母字符,数字 |
| -f | 忽略字母大小写 |
| -m | 合并已经排序的文件,不排序 |
| -n | 根据字符串的数字比较 |
| -o | 将排序后的结果写入文件 |
| -r | 以相反的顺序来排序(sort默认排序是从上往下是从小到大,加使用-n选项可以翻转排序) |
| -t | 指定排序时所用的分隔字符 |
| -k | 指定需要排序的栏位(列,域) |
| -u | 忽略相同行 |
扩展:在排序的时候我们有可能需要忽略相同的部分,这时候可以使用-u选项或者管道给uniq命令处理,也可以直接输出不重复的部分。如下:
sort -u sort.txt
uniq sort.txt
三、实例:
创建一个文件sort.txt,内容如下:
AAA:2:13
BBB:80:14
CCC:13:18
DDD:45:11
EEE:30:17
DDD:45:11
a.输出所有行,不包括重复的部分:
[root@redhat_192.168.0.12 17:46:11 ~]#sort -u sort.txt
AAA:2:13
BBB:80:14
CCC:13:18
DDD:45:11
EEE:30:17
或
[root@redhat_192.168.0.12 17:46:17 ~]#uniq sort.txt
AAA:2:13
BBB:80:14
CCC:13:18
DDD:45:11
EEE:30:17
DDD:45:11
b.以“:”为分割符,按第二列的大小进行排序
[root@redhat_192.168.0.12 17:46:20 ~]#sort -nk 2 -t: sort.txt
AAA:2:13
CCC:13:18
EEE:30:17
DDD:45:11
DDD:45:11
BBB:80:14
需要注意的是这里需要加上-n选项,因为只用-k指定列的话bash再比较大小的时候不会把第二列当成一个整体,而是先比较二列的第一个字符,然后比较第二列的第二个字符,结果如下:
[root@redhat_192.168.0.12 17:46:23 ~]#sort -k 2 -t: sort.txt
CCC:13:18
AAA:2:13
EEE:30:17
DDD:45:11
DDD:45:11
BBB:80:14
是不是发现不要-n选项之后排序就不对了,2比13大,这很明显是错误的,所以需要加上-n选项,bash会根据第二列整个字符串的数字数值大小做比较
再创建一个文件ceshi.txt,内容如下:
[root@redhat_192.168.0.12 18:57:44 ~]#cat ceshi.txt
192.168.0.13
192.168.0.12
23.207.92.222
129.204.222.143
114.114.114.114
114.111.112.114
c.同时对多列排序
[root@redhat_192.168.0.12 18:57:49 ~]#sort -k1,1n -k2,2n -k3,3n -k4,4n ceshi.txt
23.207.92.222
114.111.112.114
114.114.114.114
129.204.222.143
192.168.0.12
192.168.0.13
当对不同的列进行不同的排序的时候,需要用到k来指定起始列和终止列
-k1,1n 表示对第一列字符串进行比较,1,1表示起始列为第一列,终止列也为第一列
-k2,2n表示仅对第二列进行数值比较,如此类推

本文深入讲解Linux下sort命令的功能及使用方法,涵盖多种排序选项,如忽略大小写、数字比较、去除重复行等,并通过实例演示如何对文本文件进行复杂排序。
2440

被折叠的 条评论
为什么被折叠?



