没有-n标志的命令行排序

时间:2015-01-27 16:15:02

标签: sorting command-line

我正在尝试理解当要排序的文件的每一行的第一个字符是数字时,如果我使用不带sort标志的-n命令会发生什么。我跑的时候

du /bin/* | sort

看起来输出将所有行以相同的数字组合在一起并在每个组中排序,但数字未排序。所以,这里有一个输出片段,可以说明这一点。

44  /bin/lsblk
44  /bin/ntfswipe
44  /bin/ping
44  /bin/ping6
44  /bin/rmdir
48  /bin/cat
48  /bin/ed
48  /bin/login
4   /bin/bzdiff
4   /bin/bzgrep
4   /bin/bzmore
4   /bin/gunzip
4   /bin/red
4   /bin/running-in-container
4   /bin/unicode_start
4   /bin/which
4   /bin/zcat
4   /bin/zcmp
4   /bin/zegrep
4   /bin/zfgrep
4   /bin/zforce
4   /bin/zless
4   /bin/zmore

1 个答案:

答案 0 :(得分:2)

非数字排序是按区域设置指定的顺序逐个字符排序。描述此内容的最简单的语言环境是C,它按ASCII顺序排序;如果您处于不同的区域设置,则空格可以在数字之前或之后排序,具体取决于其归类顺序的定义方式。 (只有一个非常奇怪的语言环境不会按照常规顺序对字符09进行排序,但事实上可以定义一个语言环境来做到这一点!)。

对于C语言环境, - 空格字符的ASCII值为32,而数字0到9的ASCII值为48到57.因此,5<Space>在{{1}之后排序}},但在49之前。

如果这没有意义,请将字符替换为其排序顺序更自然的其他内容。例如,让我们通过60通过A调用空格09B。然后,K变为49DK变为5<Space>EA变为60。期望GBDK之前,EA之前,这是正常的。