像排序这种事情,用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是取第一行,按照我们的需求,这第一行必须是第一列排序后,第二列最大的在前面,因此这么就可以了。
没有发现相关文章...