Linux下sort命令的一些使用技巧

书到用时方恨少,sort这个命令不起眼,就是排序功能,但真正用起来时小技巧还是蛮多的。

将整数倒序排列,并去除重复:

sort -run abc.txt

r表示倒序,u表示除重,n表示按整数排序。

查询大文件的命令:

du -sh * | sort -rh

h表示按人可读的数字进行排序,人可读的数字指20K 50M 1.0GB等等

按第2列数字逆序排序,如果相等的话,再按第1列正序排序:

sort -k2nr -k1n abc.txt

-k表示按哪个字段进行排序,字段默认以空白字符(空格、tab等)分隔,从1开始计数,可以有 多个-k参数,写在前面的更重要,写在后面的次重要。数字后面可以加排序控制字符来指明单列 排序规则,默认遵从全局排序规则。道理一样,n表示按数字排序,r表示逆序。

稳定排序:

sort -ns abc.txt

s就表示进行稳定排序,所谓稳定排序,就是在相等的时候,不改变原有顺序。

检验是否有序:

sort -nr abc.txt | sort -nrc

c表示check是否按指定规则有序,上面的命令当然什么也不返回咯。

按字符串长度进行排序:

awk '{print length, $0}' abc.txt | sort -n | cut -f2- -d' '

其实是先通过awk在每一行开头加上长度,然后再排序,最后通过cut把第二列开始的结果输出。

一个文件每行两个整数,空格分隔,按每行的整数和排序,逆序输出

awk '{print $1+$2, $0}' abc.txt | sort -rn | cut -f2- -d' '

跟上一个命令的原理差不多,就是将求和添加到第一列,排序完成后,再丢弃掉第一列。

Yii框架中统计耗时函数

grep slow application.log| grep '12:54:' | sed 's/.* cmd:\([^ ]\+\) .*/\1/' | sort | uniq -c | sort -k 1nr

踩坑一:

文件内容为:

100022 P29 687200
100022 P295 653970

 命令及结果如下:

# sort -k1,2 a.txt
100022 P29 687200
100022 P295 653970
# sort -k1,3 a.txt
100022 P295 653970
100022 P29 687200

怎么按field 1, field 2排序,和按field 1, field 2, field 3排序结果会不一样呢,使用--debug参数,能够显示排序所使用的key,原因一目了然了:

# sort --debug -k1,2 a.txt
100022 P29 687200
__________
_________________
100022 P295 653970
___________
__________________
root@online00:/tmp# sort --debug -k1,3 a.txt
100022 P295 653970
__________________
__________________
100022 P29 687200
_________________
_________________

猜想,其实k1,3表示将三个field当成字符串拼接在一块,然后进行排序的,P295的5自然要比687200的6要小咯

发表于 2013年12月31日 16:46   评论:0   阅读:5840  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo