Sort命令

一般来说命令的命名都是跟命令的作用有关的, 嗯, 我莫名想到了 thefuck … (逃

sort就是用来排序的, 没错, 给文件内容排序:

  1. for i in {1..10};do echo $((RANDOM/20)) >> random; done
  2. cat random
  3. 1164
  4. 1522
  5. 69
  6. 1470
  7. 1232
  8. 642
  9. 1494
  10. 12
  11. 543
  12. 685

然后我们sort一下:

  1. sort random
  2. 1164
  3. 12
  4. 1232
  5. 1470
  6. 1494
  7. 1522
  8. 543
  9. 642
  10. 685
  11. 69
  12. sort -n random
  13. 12
  14. 69
  15. 543
  16. 642
  17. 685
  18. 1164
  19. 1232
  20. 1470
  21. 1494
  22. 1522

是不是很好玩? 最后一个数字竟然是 69 … 我好污…

再来个例子:

  1. cat passwd
  2. root:x:0:0
  3. daemon:x:1:1
  4. bin:x:2:2
  5. sys:x:3:3
  6. sync:x:4:65534
  7. games:x:5:60
  8. man:x:6:12
  9. lp:x:7:7
  10. mail:x:8:8
  11. news:x:9:9

我们先不带任何参数的排一下序:

  1. sort passwd
  2. bin:x:2:2
  3. daemon:x:1:1
  4. games:x:5:60
  5. lp:x:7:7
  6. mail:x:8:8
  7. man:x:6:12
  8. news:x:9:9
  9. root:x:0:0
  10. sync:x:4:65534
  11. sys:x:3:3

看到了吗, sort按照首字母排序了.

这次我们按照最后一个字段进行排序:

  1. sort -t : -k 4 passwd
  2. root:x:0:0
  3. daemon:x:1:1
  4. man:x:6:12
  5. bin:x:2:2
  6. sys:x:3:3
  7. games:x:5:60
  8. sync:x:4:65534
  9. lp:x:7:7
  10. mail:x:8:8
  11. news:x:9:9

好像不太对, 再加个参数呢:

  1. sort -n -t : -k 4 passwd
  2. root:x:0:0
  3. daemon:x:1:1
  4. bin:x:2:2
  5. sys:x:3:3
  6. lp:x:7:7
  7. mail:x:8:8
  8. news:x:9:9
  9. man:x:6:12
  10. games:x:5:60
  11. sync:x:4:65534

是不是看起来爽多了?

作者的这个例子很不错:

  1. sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n /etc/hosts
  2. 127.0.0.1 localhost.localdomain localhost
  3. 192.168.100.101 dev-db.thegeekstuff.com dev-db
  4. 192.168.100.102 prod-db.thegeekstuff.com prod-db
  5. 192.168.101.20 dev-web.thegeekstuff.com dev-web
  6. 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