用实例来说明linux命令sort的用法

sort常用参数的介绍就省略了,直接man sort就OK了......

这里主要通过实际问题来介绍(通常用于分析日志)

先介绍2个选项:

1.-k选项指定排序字段的使用:-k[FStart[.CStart]][Modifier][,[FEnd[.CEnd]][Modifier]] 

排序关键字包括所有以FStart变量指定的字段和CStart变量指定的列开头的及以FEnd变量指定的字段和CEnd变量指定的列结束的字符,缺省值为:FStart行开头,CStart字段第一列,FEnd行结束,CEnd字段最后一列

例如:-k3.2,4.4  指从第3个字段的第2个字符开始比较,一直比到第4个字段的第4个字符

2.-t选项选择字段分隔符

测试数据如下:

# cat data 
apple:234
apple:623
banana:234
apple:72
apple:123
pear:9
banana:92

一.以":"作为分隔符,对第一列进行升序排序

# sort -t ':' -k1,1 data
apple:123
apple:234
apple:623
apple:72
banana:234
banana:92
pear:9

注:默认是升序排序,貌似在对第一列排序的基础上也对第二列进行了排序,等价于# sort -t ':' -k1 data

二.以":"作为分隔符,先对第一列进行升序排序,而对第二列进行降序排序(以整数类型进行比较)

# sort -t ':' -k1,1 -k2,2nr data
apple:623
apple:234
apple:123
apple:72
banana:234
banana:92
pear:9

三.以":"作为分隔符,对第一列进行升序排序,并对第一列进行去重

# sort -t ':' -k1,1 -u data
apple:234
banana:234
pear:9

注:通过与cat data的结果进行对比可知:默认是在第一列相同的所有行中仅保留未排序状态下的第一行

四.以":"作为分隔符,对第一列进行升序排序,并对第一列进行去重,去重的规则是在第一列相同的所有行中保留第二列值最大的行

# sort -t ':' -k1,1 -k 2,2nr data | sort -t ':' -k1,1 -u
apple:623
banana:234
pear:9

其实也可以使用awk:# sort -t ':' -k1,1 -k 2,2nr data | awk 'BEGIN{FS=":"} !a[$1]++',注意这里需要使用BEGIN,明白awk的处理过程后不难理解这里为何要加上BEGIN

五.先排序,然后以":"作为分隔符对第一列去重后并统计,并按照统计的计数进行排序

# sort -t ':' -k1,1 data | awk 'BEGIN{FS=":"} {print $1}' | uniq -c | sort -n
1 pear
2 banana
4 apple

原文地址:https://www.cnblogs.com/stubborn412/p/2253071.html