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