Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 不带-n标志的命令行排序_Sorting_Command Line - Fatal编程技术网

Sorting 不带-n标志的命令行排序

Sorting 不带-n标志的命令行排序,sorting,command-line,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/l

我试图理解当要排序的文件的每一行的第一个字符都是数字时,如果使用
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

非数字排序是按区域设置指定的顺序逐字符排序。最容易描述这一点的语言环境是
C
,它按ASCII顺序进行排序;如果您位于不同的区域设置中,则空格可以在数字之前或之后排序,具体取决于其排序顺序的定义。(只有非常奇怪的区域设置才不会按常规顺序对字符
0
9
进行排序,但实际上可以定义区域设置来实现这一点!)

但是,对于
C
locale,空格字符的ASCII值为32,而数字0到9的ASCII值为48到57。因此,
5
49
之后排序,但在
60
之前排序


如果这不合理,请使用排序顺序更自然的其他内容替换字符。例如,让我们调用空格
a
,通过
9
调用
0
作为
B
通过
K
。然后,
49
变成
DK
5
变成
EA
60
变成
GB
。通常认为
DK
EA
之前,而EA又在
GB
之前,这取决于排序顺序,这取决于您的区域设置。获得规范答案的最简单方法是将您的问题定义为仅适用于环境中的
LC_ALL=C
。我建议改为
LC_COLLATE=C
,这样就不会弄乱终端的字符编码。