Linux 命令 - sort: 行排序文本文件
命令格式
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