【问题标题】:What is the default order for sort?排序的默认顺序是什么?
【发布时间】:2018-11-14 04:38:38
【问题描述】:

给定(a.txt):

2n 
4t 
7t 
11t 

之后:

sort a.txt

输出:

11t 
2n 
4t 
7t 

问题:

为什么是这个顺序?排序基于什么? (数字还是其他?)

当我尝试给出这个输入时:

2
4
7
11
20
30

输出给我这个命令:

11
2
20
30
4
7

好困惑,为什么11总是第一?

【问题讨论】:

  • 检查man sort
  • 我做了,但还是很困惑,我能解释一下吗?

标签: shell sorting unix


【解决方案1】:

来自man sort

排序实用程序按行对文本和二进制文件进行排序。一条线是一个 用换行符将记录与后续记录分开(默认)或 NUL '\0' 字符(-z 选项)。记录可以包含任何可打印或 不可打印的字符。比较基于一种或多种排序 从每行输入中提取的键,并执行 按字典顺序,根据当前语言环境的整理规则 以及可以调整实际的指定命令行选项 排序行为。默认情况下,如果没有给出键,排序使用整个 用于比较的线条。

sort 默认使用字母 (lexicographic) 顺序。如果您希望文件按数字排序,请使用sort -n

关于您关于为什么 11 在排序输出中排在 2 之前的具体问题:

  • 按字典顺序,任何以 1 开头的字符串总是小于任何以 2 开头的字符串
  • 默认情况下排序不使用数字顺序

您可以see ASCII 值 1 和 2:

printf '%d\n' "'1" "'2"
49
50

【讨论】:

  • 对不起,我很困惑,但是为什么要输入:2 4 7 11 20 30 输出:11 仍然是第一个
猜你喜欢
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
  • 2011-12-01
  • 2021-04-10
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多