sort是在Linux里非常常用的一个统计命令
1 sort的工作原理
sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
其语法及常用参数格式:
sort [-bcfMnrtk][源文件][-o 输出文件]
补充说明:sort可针对文本文件的内容,以行为单位来排序。
参 数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-f 排序时,忽略大小写字母。
-M 将前面
3
个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-h 使用易读性数字(例如:2K、1G)排序
-o <输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t <分隔字符> 指定排序时所用的栏位分隔字符。
-k 选择以哪个区间进行排序。
-v 按照版本排序
-u 排序后删除重复行,等价于sort test1 | uniq
sort -h
$ cat sort_h 60MB 10 1000KB 20MB 300KB 5 A 40GB 50KB $ cat sort_h|sort -h A 5 10 50KB 300KB 1000KB 20MB 60MB 40GB
sort -n
$ cat sort_n 01 00 0 70 78 67 23 30 09 44002 32010 32102 5743 3306 $ sort -n sort_n 0 00 01 09 23 30 67 70 78 3306 5743 32010 32102 44002
sort -t . -k 2 sort_t
$ cat sort_t 1.2.3.4 2.1.2.3 3.3.4.2 8.7.6.4 6.4.9.7 1SP2SP3SP4 2SP1SP2SP3 3SP3SP4SP2 8SP7SP6SP4 6SP4SP9SP7 $ sort -t . -k 2 sort_t 1SP2SP3SP4 2SP1SP2SP3 3SP3SP4SP2 6SP4SP9SP7 8SP7SP6SP4 2.1.2.3 1.2.3.4 3.3.4.2 6.4.9.7 8.7.6.4
一个例子:
$ last|grep -P '(d{1,3}.){3}d{1,3}'|awk '{S[$3]++} END{for(a in S) {print a,S[a]}}'|sort -k 2 -rn 113.128.81.23 43 113.118.184.151 22 120.244.191.5 21 112.10.50.241 20 120.244.232.56 17 124.74.76.126 16 58.101.55.255 15 115.236.175.131 15 113.65.210.234 15 223.71.133.42 14 119.253.43.100 14 111.199.189.52 14 101.132.159.87 14 221.219.101.182 13 183.6.105.176 13 115.199.241.187 12 113.87.130.220 11 111.23.244.189 11 220.249.15.134 10 119.131.106.244 10 118.242.17.132 10 61.149.222.113 9 111.163.143.202 9 103.27.26.3 9 59.41.64.86 8 49.66.146.59 8