Linux sort的四个小技巧

像排序这种事情,用C/C++可以写,但很麻烦,交给sort就好了,功能很强大的。

1、按照多个列排序(列间空格分开):

测试数据:

先按照第1列排序,再第2列的命令:

2011-11-20补充:必须加-s选项,表示stable sort,即两列排序互相不打扰。

$ cat ./test
1       x
5       8
1       a

$ sort -s -k 1 -k 2 ./test
1       a
1       x
5       8

2、sort默认是字典序比较,我们可以-n让它按照强制数字转换,以解决0199< 100的问题。

$ cat ./test
100
05
1

#默认,字典序,显然5<1是错误的……
$ sort ./test
05
1
100

#加-n,强制转化为数字比较
$ sort -n ./test
1
05
100

3、补充一个结合awk的,有时间一定好好学一下awk,太XX了……

需求:给定下述文件

9    19
8    12
9    17
8    100

要求按照第一列排列并去重,保留第2列大的那个,即输出:

8    100
9    17

命令来了:

sort -s -k1n -k2nr |awk '!a[$1]++'

4、再补充,好吧,想到一个比awk还简单的(awk耗内存大)

sort -s -k1n -k2nr ./aa | sort -u -k1n -k2n,1

sort也支持unique的-k2n,1后面的,1是取第一行,按照我们的需求,这第一行必须是第一列排序后,第二列最大的在前面,因此这么就可以了。

Leave a Reply

Your email address will not be published. Required fields are marked *