sort如何按指定的列排序
<1>[root@localhost company]# cat test
06d7 145 41925425
06e1 127 41925425
06e3 230 41925425
06ff 3847 41925425
070d 3408 41925425
0715 4 41925425
0726 134 41925425
我想按第二列值进行排序,从大到小的顺序。
[root@localhost company]# sort -n -k2 test 或 sort -g -k2 test //在这没有区别,在别的地是有区别的
0715 4 41925425
06e1 127 41925425
0726 134 41925425
06d7 145 41925425
06e3 230 41925425
070d 3408 41925425
06ff 3847 41925425
0715 4 41925425
06e1 127 41925425
0726 134 41925425
06d7 145 41925425
06e3 230 41925425
070d 3408 41925425
06ff 3847 41925425
-n, --numeric-sort compare according to string numerical value
-g, --general-numeric-sort compare according to general numerical value
-k, --key=POS1[,POS2] start a key at POS1, end it at POS2 (origin 1)
-t, --field-separator=SEP use SEP instead of non-blank to blank transition
linux的bash shell中有个函数叫做sort,其中有个flag是-t,这个flag的作用是指定用户定义的字符作为分隔符(bash shell 默认用'\t'和' '作为分隔符),但是当指定的字符为'\t'时,用法有些特别了,如下:
cat test.txt|sort -k 1 -t $'\t' > sort.txt
cat test.txt|sort -k 2 -t ' ' > sort.txt
注意到区别了吗?如果指定的分隔符是'\t',我们需要用$来使它表示本来的意思,否则sort程序无法识别'\t',而对于一般的制定字符,比如' '和':'就不用了。当然,用$' '和$":"也是可以的。
<2>sort -g -k2 -t':' -r nat.cfg //按照以":"为分割的最后一列反向排序
20012 192.168.5.249:20012
30062 192.168.5.249:20011
30042 192.168.5.228:20010
20005 192.168.5.232:20005
20000 192.168.5.161:20000
60251 192.168.5.251:22
60250 192.168.5.250:22
60249 192.168.5.249:22
60248 192.168.5.248:22
60247 192.168.5.247:22