linux sort命令使用教程

发布时间:2023-01-30 16:13:35 作者:yexindonglai@163.com 阅读(799)

简介

在linux系统使用过程中,提供了sort排序命令,支持常用的排序功能。

sort命令支持很多参数,常用参数如下:

短参数 长参数 说明
-n – number-sort 按字符串数值排序,与-g区别为不转为浮点数
-g –general-number-sort 按通用数值排序,支持科学计数法
-f –ignore-case 忽略大小写,默认大小写字母不同
-k –key=POS1[,POS2] 排序从POS1开始,若指定POS2,则POS2结束,否则以pos1排序
-t –field-separator=SEP 指定列的分割符
-r –reverse 降序排序,默认为升序
-h –human-numeric-sort 使用易读性数字(例如: 2K 1G)
-u –unique 去除重复的行
-o –output=FILE 将输出写入文件

常用用法举例

1.字母排序

默认情况下,sort命令,以字母序进行文本排序。如下:

  1. [guodong@proxy ~]$ cat word.txt
  2. one
  3. two
  4. three
  5. four
  6. [guodong@proxy ~]$ sort word.txt
  7. four
  8. one
  9. three
  10. two
2.数字排序
  1. [root@master home]# cat word.txt
  2. 2
  3. 8
  4. 9
  5. 5
  6. 3
  7. 1
  8. 4
  9. 6
  10. 7
  11. [root@master home]# sort word.txt -n
  12. 1
  13. 2
  14. 3
  15. 4
  16. 5
  17. 6
  18. 7
  19. 8
  20. 9
3、指定列排序

sort排序的时候,可以按字段分割的数据进行排序。

  • -t:参数表示行的分割字符,
  • -k:表示第几列
  • -r:表示进行降序排序,

下面是对passwd文件,以冒号(:)进行分割,然后对第三列以数字方式进行降序排序。

  1. [root@master home]# cat /etc/passwd
  2. root:x:0:0:root:/root:/bin/bash
  3. bin:x:1:1:bin:/bin:/sbin/nologin
  4. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  5. adm:x:3:4:adm:/var/adm:/sbin/nologin
  6. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  7. sync:x:5:0:sync:/sbin:/bin/sync
  8. shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
  9. halt:x:7:0:halt:/sbin:/sbin/halt
  10. mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
  11. operator:x:11:0:operator:/root:/sbin/nologin
  12. games:x:12:100:games:/usr/games:/sbin/nologin
  13. ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  14. nobody:x:99:99:Nobody:/:/sbin/nologin
  15. systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
  16. dbus:x:81:81:System message bus:/:/sbin/nologin
  17. polkitd:x:999:998:User for polkitd:/:/sbin/nologin
  18. sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  19. postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  20. chrony:x:998:996::/var/lib/chrony:/sbin/nologin
  21. nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
  22. tcpdump:x:72:72::/:/sbin/nologin
  23. saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin
  24. [root@master home]# sort -t ':' -k 3 -nr /etc/passwd
  25. polkitd:x:999:998:User for polkitd:/:/sbin/nologin
  26. chrony:x:998:996::/var/lib/chrony:/sbin/nologin
  27. saslauth:x:997:76:Saslauthd user:/run/saslauthd:/sbin/nologin
  28. systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
  29. nobody:x:99:99:Nobody:/:/sbin/nologin
  30. postfix:x:89:89::/var/spool/postfix:/sbin/nologin
  31. dbus:x:81:81:System message bus:/:/sbin/nologin
  32. sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
  33. tcpdump:x:72:72::/:/sbin/nologin
  34. nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
  35. ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
  36. games:x:12:100:games:/usr/games:/sbin/nologin
  37. operator:x:11:0:operator:/root:/sbin/nologin
  38. mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
  39. halt:x:7:0:halt:/sbin:/sbin/halt
  40. shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
  41. sync:x:5:0:sync:/sbin:/bin/sync
  42. lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
  43. adm:x:3:4:adm:/var/adm:/sbin/nologin
  44. daemon:x:2:2:daemon:/sbin:/sbin/nologin
  45. bin:x:1:1:bin:/bin:/sbin/nologin
  46. root:x:0:0:root:/root:/bin/bash
4.文件夹大小排序

在du的时候,加上-h可以使用易读性数字,比如2k,1g,3M这种。sort也支持-h参数。
比如,du一个文件夹下的目录大小后,想以文件大小进行排序。由于du -h的结果是3k,2M,1G这种,不能简单的按数字排序。所以,可以使用-h参数。具体如下:

  1. [guodong@proxy ~]$ du -h
  2. 2.0G ./test2
  3. 4.0K ./test3
  4. 316M ./test
  5. 2.3G .
  6. [guodong@proxy ~]$ du -h |sort -hr
  7. 2.3G .
  8. 2.0G ./test2
  9. 316M ./test
  10. 4.0K ./test3
5.系统进程内存占用排序

查看系统进程中,内存占用最多的前5个进程信息

  1. [guodong@proxy ~]$ ps aux|sort -gr -k 4|head -n 5
  2. shuanghu 1740 15.7 4.6 1506764 189872 ? Sl 507 142:08 compiz
  3. root 1304 2.1 1.9 338928 80208 tty7 Ssl+ 507 19:29 /usr/bin/X -core :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
  4. shuanghu 1933 0.0 1.1 1074520 46708 ? Sl 507 0:00 /usr/lib/evolution/evolution-calendar-factory
  5. shuanghu 1833 0.0 0.8 974900 34468 ? Sl 507 0:01 nautilus -n
  6. shuanghu 2111 0.0 0.6 655712 24920 ? Sl 507 0:16 gnome-terminal
6.对文件内容进行去重 -u

如果文件内容有很多重复的,需要进行去重。sort也是支持的,可以通过-u参数使用

  1. [guodong@proxy ~]$ cat word.txt
  2. one
  3. two
  4. two
  5. three
  6. three
  7. three
  8. four
  9. four
  10. four
  11. [guodong@proxy ~]$ sort -u word.txt
  12. four
  13. one
  14. three
  15. two
7.将sort输出内容写入文件

在shell中,一般将控制台内容写入文件,可以使用重定向,但如果想把sort的排序内容写回文件,则不能使用重定向。则需要-o参数。具体如下:

  1. [guodong@proxy ~]$ cat word.txt
  2. one
  3. two
  4. three
  5. four
  6. [guodong@proxy ~]$ sort word.txt > word.txt
  7. [guodong@proxy ~]$ cat word.txt #输出为空
  8. [guodong@proxy ~]$ sort word.txt -o word.txt
  9. [guodong@proxy ~]$ sort -u word.txt
  10. four
  11. one
  12. three
  13. two

关键字linux