sort

文本数据排序


语法格式

sort [-bcdfghimMnru] [-k pos1[,pos2]] [-o file] [-t sep] [-T dir] [files]
sort [--help] [--version]

命令简介

sort命令读取指定的输入文件,按照指定的排序原则与当前的语言环境,把排序后的结果写到标准输出或指定的文件中。

其中,files是需要排序的文本数据文件。如果未指定输入文件参数,或指定的文件名为“-”,则从标准输入读取需要排序的数据。

注意,LC_ALL环境变量设定的语言环境将会影响排序的结果。例如,把LC_ALL设置为“LC_ALL=C”表示采用英文语言环境,按照ASCII代码的编码获得传统的排序结果。如果把LC_ALL设置为“LC_ALL=zh_CN.utf8”,将会按照中文拼音的顺序排序中文数据。

命令选项(排序选项)

-b, --ignore-leading-blanks  忽略行首的空格或制表符等空白字符。

-d, --dictionary-order  按字典顺序排序。排序时只考虑字母、数字和空白字符(空格和制表符),忽略其他任何字符。

-f, --ignore-case  排序时忽略大小写字母的差异。排序前首先把小写字母转换成大写字母,然后统一按大写字母编码顺序进行排序。

-g, --general-numeric-sort  首先把数字字符串转换成双精度浮点数,然后进行排序,允许排序的数据中包含诸如“1.0E-34”或“10E100”等数学符号表达形式。

-h, --human-numeric-sort  按照字符串的数值或加单位后缀的数值(如8K或2G等)进行排序,但附加的单位必须统一,否则排序结果可能不正确。

-i, --ignore-nonprinting  以可见字符为准进行排序,忽略不可打印的字符。

-M, --month-sort  按照月份排序。以英文语言环境为例,截取排序字段的前三个非空格字符,必要时首先转换成大写字母,然后按照“JAN”<“FEB”< …<“DEC”的顺序进行比较。其他无效的字段低于“JAN”。

-n, --numeric-sort  按照字符串表示的算术数值(包括算术符号和千分号等)而非字符串本身进行排序。空数字串按零处理。

-r, --reverse  反向排序。

命令选项(其他选项)

-c, --check, --check=diagnose-first  检测指定的输入文件是否已经排序。如果已排序妥当,返回0,不输出任何信息;否则显示其中第一个不符合排序规则的文本数据行,返回1。

-C, --check=quiet, --check=silent  类似于“-c”选项。但在任何情况下,仅返回结束状态而已,不输出任何信息。

-k pos1[,pos2], --key=pos1[,pos2]  指定排序关键字的起止字段及字符位置。其中,pos可以表示为f[.c][opts],f是字段号,c是字段中的字符位置,其编号均从1开始,opts是一个或多个单字符的排序选项(即bdfghiMnr),用于指定相应字段的排序方法,而忽略全局排序选项。如果未指定排序关键字,使用整个文本数据行作为排序关键字。pos1表示起始字段(默认值为第一个字段),pos2表示结束字段(默认值为行尾字段)。

-m, --merge  合并已排序的文件。

-o file, --output=file  把排序结果写入指定的文件而非标准输出。

-t sep, --field-separator=sep  使用指定的字符作为字段分隔符分割文本行。默认的字段分隔符为空格或制表符。

-T dir, --temporary-directory=dir  使用指定的目录(而非$TMPDIR或/tmp)作为临时工作目录。

-u, --unique  确保排序结果的唯一性。当排序关键字相同而出现重复现象时,仅选取其中第一个出现的文本数据行。当与“-c”选项一起使用时,除了检测输入文件是否已经排序,还要检测是否存在重复的文本数据行。

应用实例

1. 以冒号为分隔符,按照用户ID(第3个字段)的数值从小到大排序,在终端上显示排序后的/etc/passwd文件。

$ sort –t ':' -n -k 3 /etc/passwd

2. 从分机号码(第2个字段)的第3位开始,重排电话号码,然后写入新的文件。

$ sort -k 2.3 –o newphonebook phonebook
$

索引:A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z