命令功能:
通过sort命令可以实现对输入流或者文本内容进行排序,并将结果输出。
命令语法:
sort [option] [file]
命令参数:
参数 | 说明 |
---|---|
-k | 指定列,排序会按照此列为基准进行排序 |
-r | 倒序排序 |
-t | 指定排序的分隔符 |
-h | 可以带单位进行比较,比如2K,3M,4G等等,不需要在转换成一样的单位 |
-u | 排序时如果有相同行,会进行合并,把重复行去掉 |
-n | 按照数字的大小进行排序 |
以上,应该是sort最常使用的几个参数,其他的参数还有很多,如需使用,可以使用查询帮助:
man sort 或者 sort --help
命令示例
1、不加参数
sort会按照ASCII码从第一个字符开始进行比较,第一个字符相同再按照第二个字符、第三个字符…依次论推进行比较。
这里有一个sort_num文件进行排序测试,如下:
命令:sort sort_num
结果如下:
这里18最大却排在了前面,由于没加任何参数,18实际上会被当做两个字符"1"和"8",所以按照ASCII码的顺序,"1"当然比第二行同位置的"4"以及第六行同位置的"5"以及最后一行的"8"小,所以排在前面了。
2、加参数-n:按数字排序
这个参数会把文本按数字进行排序,还是1中的例子:
命令:·sort -n sort_num
这次18排在后面啦!
3、参数-r:倒序排序
这就是顺序和没加参数的sort结果反过来。正常的sort命令是按照ASCII码顺序依次从小往大排,-r就是从大往小排。
命令:sort -r sort_num
4、参数-u:去除重复值:
比如这个sort_num文件,加参数-u会把包含4的行做去重操作,只保留一个。
5、参数-k:指定要比较的列
默认情况下,如果要比较的数据中有多个列,那么sort比较默认会比第一列,加-k参数,会按照指定的列进行比较:
如下,:
命令:sort -k 2
6、参数-t:指定分隔符
默认情况下,我们用-k指定列时,列与列之间默认是用空格或者tab键隔开的。-t可以指定分隔符为别的符号。比如passwd文件,我们指定以冒号为分割,按第三列进行比较,如下:
7、-k参数的进阶使用
-k参数可以使用多次,按照多列进行排序。
这里有个文档,如下:
我们对这个ip列表用".“分隔,先对第四列排序,然后在对第三列排序。
命令:sort -t . -k 4.1,4.2 -k 3,3 sort_ip
参数解释:
-t .
以”."为分隔符进行分割
-k 4.1,4.2
:先按照第4列进行排序,从第四列的第一个字符到第四列的第二个字符。
-k 3,3
按照第3列进行排序。
结果:
可以看到,结果是优先排序第四列,如果第四列相同,会按照第三列进行排序