首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序(默认选项和数值选项-n之间的区别)

排序(默认选项和数值选项-n之间的区别)
EN

Unix & Linux用户
提问于 2017-07-30 19:55:37
回答 1查看 3.5K关注 0票数 1

根据手册页,我们对排序命令的--数字排序选项有如下描述。

代码语言:javascript
复制
-n, --numeric-sort
              compare according to string numerical value

我假设,通过字符串数值,我们意味着将每个字符串字符按照其ASCII值进行连续比较?

信息页读到

代码语言:javascript
复制
‘-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选项使用哪个排序规则顺序的明确解释。

--数字排序选项与默认选项有何不同?我天真地猜测,数字优先于字母,但我并没有在文档中读到这一点。

哪些文档明确地说明了这一点,也就是说,通过查找文档,我可以在哪里找到这些信息?

EN

回答 1

Unix & Linux用户

发布于 2017-07-30 20:50:41

当您有多位数字时,sort -n会考虑整个数字;默认情况下,该文件

代码语言:javascript
复制
3
2
1
20
30

就像这样:

代码语言:javascript
复制
1
2
20
3
30

这可能不是你想要的。使用-n,您可以得到:

代码语言:javascript
复制
1
2
3
20
30

数字排序还处理负数、小数点和数千个分隔符(取决于您的区域设置)。如果有尾随“非数字”文本,它将在排序顺序中被忽略。如果该行以非数字开头,则该行被计算为0。

更确切地说,逻辑是这样的:(主)排序键是一个初始的数字字符串。(也就是说,“数字开始于每行”)。该字符串被定义为由可能的空格、减号、零或更多位数以及可能的., (或其他什么)组成。尾随字母不考虑因素--它们不是“数字”的一部分。如果该行不以数字开头,则将其视为等于0的不可见(“空”)数字。(或者,“一个零位数的数字”)

因此,在对"the number“进行排序(比较使用-k提供排序键)之后,如果还有其他行,则使用默认排序对这些行进行排序。(也就是说,1a1b之前,1a201a3之前。)整行是以这种方式排序的,除了排序键之外,行没有排序,在这种情况下,排序键给出了一些奇怪的行为(0cookiesbiscuits之前排序--对于第二个排序,没有添加“不可见的0”)。

通常,当您实际希望对由数字组成的行(或字段)进行排序时,请使用-n。如果你有一堆不是数字的东西,或者数字和其他字符串混在一起,你仍然会得到一个一致的结果,但它可能不是你想要的。

如果您有字母和数字的混合(以及包含两者的行),您可能更喜欢-V,它根据将字符串划分为逻辑组件的特殊规则进行版本排序--但是要小心,因为这会使1.101.9更高。

票数 5
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/382798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档