5.3 使用sort排序

很多情况下需要对无序的数据进行排序,这时就要用到sort排序了。下面列出了该命令常用的参数:


  1. [root@localhost ~]# sort [-ntkr]

  2. 文件名

  3. #-n

  4. 采取数字排序

  5. #-t

  6. 指定分隔符

  7. #-k

  8. 指定第几列

  9. #-r

  10. 反向排序


为演示sort的用法,这里首先创建一个文件,文件名和文件内容如下:


  1. [root@localhost ~]# cat sort.txt

  2. b:3

  3. c:2

  4. a:4

  5. e:5

  6. d:1

  7. f:11


下面对输出的内容进行排序:


  1. [root@localhost ~]# cat sort.txt | sort

  2. a:4

  3. b:3

  4. c:2

  5. d:1

  6. e:5

  7. f:11

  8. #

  9. 对输出内容直接排序时,默认按照每行的第一个字符进行排序


下面表示对输出内容进行反向排序:


  1. [root@localhost ~]# cat sort.txt | sort -r

  2. f:11

  3. e:5

  4. d:1

  5. c:2

  6. b:3

  7. a:4

  8. #

  9. 和上面的例子的输出相反


可观察到,sort.txt文件具有一个特点,第一个字符是字母,第三个字符是数字,中间用冒号隔开。这样就可以用-t指定分隔符,并用-k指定用于排序的列了。


  1. [root@localhost ~]# cat sort.txt | sort -t ":" -k 2

  2. d:1

  3. f:11

  4. c:2

  5. b:3

  6. a:4

  7. e:5

  8. #

  9. 你可能已注意到,当前的排序是按照数字列的部分进行的。不过,第2

  10. 行为什么是11

  11. 呢?

  12. 那是因为当前的排序并不是按照“数字值来进行的”


在上面的命令中,当前的排序是按照以冒号隔开的第二部分进行的,不过读者是否注意到,第二行是f:11,这一行不应该在最后一行吗?因为11是最大的。但其实命令的输出并不是错误的,因为按照排序的方式,只会看第一个字符,而11第一个字符是1,按照字符来排序那它确实比2小。如果想要指定按照“数字”的方式进行排序,则需要加上-n参数。


  1. [root@localhost ~]# cat sort.txt | sort -t ":" -k 2 -n

  2. d:1

  3. c:2

  4. b:3

  5. a:4

  6. e:5

  7. f:11