Linux sort命令中文手册(info sort翻译)(2)

因此,对于"abc 100 200"这样的输入,假设字段分隔符为空格,当指定"-k 2n"时,该key为"100 200",但由于中间包含了空白,使得该key的排序在第二字段就结束。如果是"abc 100\0200 200","-k 2n"在排序时,虽然看上去是100200,但却只对100进行排序,也就是说,如果此时另有一行第2字段值为110,看上去很大的100200将小于110。测试语句:

echo -e "b 100:200 200\na 110 300" | tr ':' '\0'|sort -t ' ' -k2n -k1

因此,对于"-n"来说,它绝对不可能跨越key的边界。但默认的排序规则会跨越key起作用。)

'-r'
'--reverse'
反转比较的结果,使得结果中更大的key更早出现。(注:"-r"不会改变排序行为,而是将排序结束后的输出结果进行反转处理,因此只影响排序结束后的输出结果)

'-k POS1[,POS2]'
'--key=POS1[,POS2]'
指定排序的key,即每行排序的起始和终止字段(若省略POS2,则终止位置为行尾)。

POS的格式为"F[.C][OPTS]",其中F表示字段的序号,C表示该字段中字符的序号。字段和字符的位置都从1开始计算。如果POS2的字符位置指定为0,则表示POS2字段中的最后一个字符。如果POS1中省略".C",则默认值为1(字段的起始字符),如果POS2中省略".C",默认值为0(字段的终止字符)。OPTS为排序选项,这些选项将覆盖全局选项,使得该key可以按照独立的排序选项进行排序。keys可以跨多个字段。
(注:OPTS指定在POS1和POS2的作用是一样的,因为一个"-k"指定一个key,无论是POS1还是POS2中的OPTS都是对这个key有效,但"b"选项除外,见下文)

示例:为了排序第二个字段,使用"--key=2,2"(-k 2,2)。可使用"--debug"选项帮助查看、分析和决定每行中被用于排序的字段。

'--debug'
显示每行中用于排序的部分。还会给出额外的信息。

'-o OUTPUT-FILE'
'--output=OUTPUT-FILE'
将排序的输出结果写入到OUTPUT-FILE中。一般来说,sort在打开OUTPUT-FILE前读取完所有输入,因此可以安全地将排序结果保存到输入文件中,就像"sort -o file1 file1"和"cat file1 | sort -o file1"一样。但是,"-m"选项会在读取输入前先打开输出文件,因此下面的语句是不安全的语句:

"cat file1 | sort -m -o file1 -"

'-s'
'--stable'
禁止sort执行"最后的排序"。在没有指定字段选项或全局选项时,该选项将不起作用,除非指定的是"-r"选项。
(注:最后的排序:在key的比较结果相同时,sort的最后手段是对整行再进行一次完全默认的排序,即按照字母、升序对整行做最后排序。这称为"最后的排序"。如果未指定任何选项,其本身就是完全默认的,因此没必要再做最后的排序。如果指定的是"-r"选项,由于"-r"是对最终结果进行反转排序,因此会影响这次的"最后的排序"的结果)

'-t SEPARATOR'
'--field-separator=SEPARATOR'
当在每行中搜索key的时候,使用SEPARATOR字符作为字段的分隔符。默认情况下,字段是由空白字符和非空白字符之间的空字符串分割而来的。

因此,如果输入行为" foo bar",默认将切分为两个字段" foo"和" bar",(注:空白和非空白字符之间的空字符为行开头和"oo"后的位置)。字段分隔符不是分隔后字段中的内容,因此"sort -t ' '"对" foo bar"分隔时,将分割为3个字段:空字段、"foo"和"bar"。但是,每个单独的字段都是扩展到行结尾的,就像"-k 2",或像"-k 2,3"包含了范围的字段,它们都在扩展的时候保留字段分隔符。
(注:以sort -t ' '为例,"-k 2"实际上表示的是"foo bar",它扩展到行尾,且中间的字段分隔符被保留。而"-k 1,2"实际上表示的是" foo",因为明确指定了这个key到第二个字段结束,但中间的字段分隔符仍保留)
如果要指定字段分隔符为空,则使用"\0",例如"sort -t '\0'"。

'--parallel=N'
设置sort运行的并行线程数为N。默认N设置为可获得的cpu个数,但最大限制为8,因为超过8之后带来的性能收益递减。

'-u'
'--unique'
一般情况下,"-u"将仅输出排序后重复行的第一行。该选项会禁止"最后的排序"(注:见前文译文)。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13525.html