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

results matching ""

    No results matching ""