shell 及相关 / 未分类 · 2013年11月19日

sort 排序

sort 排序
有时 ls 一下 你会发现
html_s109
html_s11
怎么109 在11前面了呢 很明显这不是我们想要的结果
怎么办呢 ,就昨借助一下 sort
# -t ‘_’ 是用 _分隔 -k2.2 是 _分开的第二个 的第二列 -n 依照数值的大小排序
ls -alh |grep html|awk '{print $9}'|sort -t '_' -k2.2 -n
下面列出一些常用 的sort 参  数:
-b 忽略每行前面开始出的空格字符。
-c 检查文件是否已经按照顺序排序。
-d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
-f 排序时,将小写字母视为大写字母。
-i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
-m 将几个排序好的文件进行合并。
-M 将前面3个字母依照月份的缩写进行排序。
-n 依照数值的大小排序。
-o<输出文件> 将排序后的结果存入指定的文件。
-r 以相反的顺序来排序。
-t<分隔字符> 指定排序时所用的栏位分隔字符。
+<起始栏位>–<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
–help 显示帮助。
–version 显示版本信息
-k, –key=POS1[,POS2] start a key at POS1, end it at POS2 (origin 1)
另一个例子
[root@vm6 ~]# cat 2
hd_s15_master_1 NULL
hd_s16 NULL
hd_s57 5453.21MB
hd_s4 15657.37MB
hd_s84 6819.89MB
hd_s90 7652.82MB
hd_s95 6483.36MB
hd_s124 4115.92MB
hd_s132 4728.20MB
hd_s134 3313.86MB
hd_s132 4728.20MB
hd_s134 3313.86MB
hd_s10001 0.99MB
[root@vm6 ~]# sort -n 2
hd_s10001 0.99MB
hd_s124 4115.92MB
hd_s132 4728.20MB
hd_s132 4728.20MB
hd_s134 3313.86MB
hd_s134 3313.86MB
hd_s15_master_1 NULL
hd_s16 NULL
hd_s4 15657.37MB
hd_s57 5453.21MB
hd_s84 6819.89MB
hd_s90 7652.82MB
hd_s95 6483.36MB
[root@vm6 ~]# sort -n 2 -t s -k 2
hd_s4 15657.37MB
hd_s15_master_1 NULL
hd_s16 NULL
hd_s57 5453.21MB
hd_s84 6819.89MB
hd_s90 7652.82MB
hd_s95 6483.36MB
hd_s124 4115.92MB
hd_s132 4728.20MB
hd_s132 4728.20MB
hd_s134 3313.86MB
hd_s134 3313.86MB
hd_s10001 0.99MB

参考资料
http://www.linuxso.com/command/sort.html
http://tonykorn97.itpub.net/post/6414/273539
http://linux.chinaunix.net/techdoc/system/2008/09/21/1033339.shtml