根据手册页,我们对排序命令的--数字排序选项有如下描述。
-n, --numeric-sort
compare according to string numerical value我假设,通过字符串数值,我们意味着将每个字符串字符按照其ASCII值进行连续比较?
信息页读到
‘-n’
‘--numeric-sort’
‘--sort=numeric’
Sort numerically. The number begins each line and consists of
optional blanks, an optional ‘-’ sign, and zero or more digits
possibly separated by thousands separators, optionally followed by
a decimal-point character and zero or more digits. An empty number
is treated as ‘0’. The ‘LC_NUMERIC’ locale specifies the
decimal-point character and thousands separator. By default a
blank is a space or a tab, but the ‘LC_CTYPE’ locale can change
this.
Comparison is exact; there is no rounding error.
Neither a leading ‘+’ nor exponential notation is recognized. To
compare such strings numerically, use the ‘--general-numeric-sort’
(‘-g’) option.在阅读了这两个文档之后,我仍然没有看到对-n选项使用哪个排序规则顺序的明确解释。
--数字排序选项与默认选项有何不同?我天真地猜测,数字优先于字母,但我并没有在文档中读到这一点。
哪些文档明确地说明了这一点,也就是说,通过查找文档,我可以在哪里找到这些信息?
发布于 2017-07-30 20:50:41
当您有多位数字时,sort -n会考虑整个数字;默认情况下,该文件
3
2
1
20
30就像这样:
1
2
20
3
30这可能不是你想要的。使用-n,您可以得到:
1
2
3
20
30数字排序还处理负数、小数点和数千个分隔符(取决于您的区域设置)。如果有尾随“非数字”文本,它将在排序顺序中被忽略。如果该行以非数字开头,则该行被计算为0。
更确切地说,逻辑是这样的:(主)排序键是一个初始的数字字符串。(也就是说,“数字开始于每行”)。该字符串被定义为由可能的空格、减号、零或更多位数以及可能的.和, (或其他什么)组成。尾随字母不考虑因素--它们不是“数字”的一部分。如果该行不以数字开头,则将其视为等于0的不可见(“空”)数字。(或者,“一个零位数的数字”)
因此,在对"the number“进行排序(比较使用-k提供排序键)之后,如果还有其他行,则使用默认排序对这些行进行排序。(也就是说,1a在1b之前,1a20在1a3之前。)整行是以这种方式排序的,除了排序键之外,行没有排序,在这种情况下,排序键给出了一些奇怪的行为(0cookies在biscuits之前排序--对于第二个排序,没有添加“不可见的0”)。
通常,当您实际希望对由数字组成的行(或字段)进行排序时,请使用-n。如果你有一堆不是数字的东西,或者数字和其他字符串混在一起,你仍然会得到一个一致的结果,但它可能不是你想要的。
如果您有字母和数字的混合(以及包含两者的行),您可能更喜欢-V,它根据将字符串划分为逻辑组件的特殊规则进行版本排序--但是要小心,因为这会使1.10比1.9更高。
https://unix.stackexchange.com/questions/382798
复制相似问题