Linux 命令 - sort: 行排序文本文件

时间:2022-08-23 19:20:19

命令格式

sort [OPTION]... [FILE]...

命令参数

-b, --ignore-leading-blanks
  忽略开头的空白字符。

-d, --dictionary-order
  只考虑空白字符、字母和数字字符。

-f, --ignore-case
  排序时不区分大小写。

-g, --general-numeric-sort
  根据常规数值排序。

-i, --ignore-nonprinting
  只考虑可打印的字符。

-M, --month-sort
  根据月份排序, JAN < ... < DEC。

-h, --human-numeric-sort
  根据适合阅读的数值比较(例如,2K 1G)。

-n, --numeric-sort
  根据字符串数数值比较。

-R, --random-sort
  根据随机 hash 排序。

--random-source=FILE
  从指定的文件中获取随机字节。

-r, --reverse
  反向排序。

-V, --version-sort
  根据版本排序。

-c, --check, --check=diagnose-first
  检查目标文本是否已经排序而不会进行排序。

-C, --check=quiet, --check=silent
  类似 -c 选项,但不报告第一个无序行。

-k, --key=POS1[,POS2]
  对 POS1 与 POS2 之间的字符排序,而不是整个文本行。

-m, --merge
  合并已排好序的文件而不会进行排序。

-o, --output=FILE
  将排序结果输出至指定文件而不是标准输出。

-t, --field-separator=SEP
  定义字段的空格符。默认情况下,字段是由空格或制表符分开的。

-T, --temporary-directory=DIR
  使用 DIR 作为临时目录而不是 $TMPDIR 或 /tmp,可用多个选项指定多个目录。

-z, --zero-terminated
  以 0 字节而非新行作为行尾标志。

--help
  显示帮助信息。

--version
  显示版本信息。

实例

测试文件 testfile:

mysql    39216       10.21.28.47       Oct  2 14:29
mail 4981 10.6.0.28 Oct 1 10:54
root 2672 10.6.0.32 Sep 27 15:53
mail 7724 10.6.0.32 Sep 14 11:40
root 18122 10.6.0.32 Aug 30 14:36
mysql 20441 10.21.28.58 Jun 22 21:14
root 5961 10.6.0.32 Jun 6 09:38
admin 60327 10.6.0.203 Mar 11 23:03
mysql 10885 10.6.0.203 Jan 20 12:53
admin 9917 10.6.0.32 Jan 16 17:01

a) 对文本行排序。

[huey@huey-K42JE cmdline]$ sort testfile
admin 60327 10.6.0.203 Mar 11 23:03
admin 9917 10.6.0.32 Jan 16 17:01
mail 4981 10.6.0.28 Oct 1 10:54
mail 7724 10.6.0.32 Sep 14 11:40
mysql 10885 10.6.0.203 Jan 20 12:53
mysql 20441 10.21.28.58 Jun 22 21:14
mysql 39216 10.21.28.47 Oct 2 14:29
root 18122 10.6.0.32 Aug 30 14:36
root 2672 10.6.0.32 Sep 27 15:53
root 5961 10.6.0.32 Jun 6 09:38

b) 根据第 2 列字段排序。

[huey@huey-K42JE cmdline]$ sort -k 2 testfile
mysql 10885 10.6.0.203 Jan 20 12:53
root 18122 10.6.0.32 Aug 30 14:36
mysql 20441 10.21.28.58 Jun 22 21:14
root 2672 10.6.0.32 Sep 27 15:53
mysql 39216 10.21.28.47 Oct 2 14:29
mail 4981 10.6.0.28 Oct 1 10:54
root 5961 10.6.0.32 Jun 6 09:38
admin 60327 10.6.0.203 Mar 11 23:03
mail 7724 10.6.0.32 Sep 14 11:40
admin 9917 10.6.0.32 Jan 16 17:01

c) 将第 2 列字段作为数字反向排序。

[huey@huey-K42JE cmdline]$ sort -k 2nr testfile
admin 60327 10.6.0.203 Mar 11 23:03
mysql 39216 10.21.28.47 Oct 2 14:29
mysql 20441 10.21.28.58 Jun 22 21:14
root 18122 10.6.0.32 Aug 30 14:36
mysql 10885 10.6.0.203 Jan 20 12:53
admin 9917 10.6.0.32 Jan 16 17:01
mail 7724 10.6.0.32 Sep 14 11:40
root 5961 10.6.0.32 Jun 6 09:38
mail 4981 10.6.0.28 Oct 1 10:54
root 2672 10.6.0.32 Sep 27 15:53