2015-04-11

sort - 排序指令

sort 是個很強大很的排序工具,而且通常還會搭配 sed, awk, head, tail, uniq 等工具來使用,話說 sort 本身可以做到依欄位排列的功能!相信透過各種參數的組合運用,可以讓攻程師們少寫幾行 code。

[ jonny@yosemite ~ ]
$ history | awk '{print $2}' | sort | uniq -c | sort -nr | nl | less 
 1 1346 ls
 2  726 cd
 3  688 git
 4  224 sdcv
 5  219 vi
 6  219 ssh
 7  158 mv
 8  154 cat
 9   98 brew
10  92 host 
▲ 透過以上指令,可以得知凍仁近來最常用的指令是 ls。

依欄位排列


在很多時候,我們會想對某一欄進行排列以快速取得資訊,這時可以搭配 -n, -k, -t 的參數使用。
[ jonny@yosemite ~ ]
$ man sort [Enter]
  -n, --numeric-sort
         compare according to string 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
 ...

依「:」符號分欄,並依第 1 欄進行列序。
[ jonny@yosemite ~ ]
$ cat /etc/passwd | sort -t: -n -k1
_amavisd:*:83:83:AMaViS Daemon:/var/virusmails:/usr/bin/false
_appleevents:*:55:55:AppleEvents Daemon:/var/empty:/usr/bin/false
_appowner:*:87:87:Application Owner:/var/empty:/usr/bin/false 

依「:」符號分欄,並依第 3 欄進行列序。
[ jonny@yosemite ~ ]
$ cat /etc/passwd | sort -t: -n -k3
root:*:0:0:System Administrator:/var/root:/bin/sh
daemon:*:1:1:System Services:/var/root:/usr/bin/false
_uucp:*:4:4:Unix to Unix Copy Protocol:/var/spool/uucp:/usr/sbin/uucico

「我是要成為攻程師的男人!」大家下集見啦~
(狀態顯示為剛陪老婆看航海王 ...)

資料來源:
How to use awk sort by column 3 - Stack Overflow