Sort命令
一般来说命令的命名都是跟命令的作用有关的, 嗯, 我莫名想到了 thefuck ... (逃
sort
就是用来排序的, 没错, 给文件内容排序:
➤ for i in {1..10};do echo $((RANDOM/20)) >> random; done
➤ cat random
1164
1522
69
1470
1232
642
1494
12
543
685
➤
然后我们sort
一下:
➤ sort random
1164
12
1232
1470
1494
1522
543
642
685
69
➤ sort -n random
12
69
543
642
685
1164
1232
1470
1494
1522
➤
是不是很好玩? 最后一个数字竟然是 69 ... 我好污...
再来个例子:
➤ cat passwd
root:x:0:0
daemon:x:1:1
bin:x:2:2
sys:x:3:3
sync:x:4:65534
games:x:5:60
man:x:6:12
lp:x:7:7
mail:x:8:8
news:x:9:9
➤
我们先不带任何参数的排一下序:
➤ sort passwd
bin:x:2:2
daemon:x:1:1
games:x:5:60
lp:x:7:7
mail:x:8:8
man:x:6:12
news:x:9:9
root:x:0:0
sync:x:4:65534
sys:x:3:3
➤
看到了吗, sort
按照首字母排序了.
这次我们按照最后一个字段进行排序:
➤ sort -t : -k 4 passwd
root:x:0:0
daemon:x:1:1
man:x:6:12
bin:x:2:2
sys:x:3:3
games:x:5:60
sync:x:4:65534
lp:x:7:7
mail:x:8:8
news:x:9:9
好像不太对, 再加个参数呢:
➤ sort -n -t : -k 4 passwd
root:x:0:0
daemon:x:1:1
bin:x:2:2
sys:x:3:3
lp:x:7:7
mail:x:8:8
news:x:9:9
man:x:6:12
games:x:5:60
sync:x:4:65534
是不是看起来爽多了?
作者的这个例子很不错:
sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts
127.0.0.1 localhost.localdomain localhost
192.168.100.101 dev-db.thegeekstuff.com dev-db
192.168.100.102 prod-db.thegeekstuff.com prod-db
192.168.101.20 dev-web.thegeekstuff.com dev-web
192.168.101.21 prod-web.thegeekstuff.com prod-web
把IP地址排序, 可以研究下他是怎么做到的.
最后原作者还介绍了几套组合拳:
- ps –ef | sort #给进程排序
- ls -al | sort -nk 5 #根据文件大小进行排序
- ls -al | sort -nrk 5 #根据文件大小反向排序
注意,这里跟原著有差别哦, 因为我按照原著上的并没有成功, 我的系统是Ubuntu 15.10