使用 -k 大于键数的排序

使用 -k 大于键数的排序

我试图通过 sort 命令理解我们项目中使用的现有脚本

sort -t= -nr -k3 nos 

包含空格和数字的文件在哪里nos,例如:997 998 999 1000

输出是

999
998
997
1000

我不明白为什么 1000 出现在最后。我怀疑这是因为-k3每个条目只有一个键时的参数,但我在文档中找不到任何内容来说明当指定的键位置不存在时它的行为方式。

直到文件中包含 4 位数字为止,这给出了按数字降序对数字进行排序的预期结果。

答案1

当您指定不存在的排序字段时,对于每个sort存在的比较,排序键将为空。这意味着键的比较将始终相等。这会触发一部分标准规格sort这就是说全线应用作排序键,并且选项 -d-f-i-n-k均无效。

这反过来意味着该命令的效果与

sort -r nos

它对数据进行反向字典排序(-t=此处不起作用)。由于顺序在 之前,所以按相反的字典顺序在997前面。100091


POSIX 标准中的相关位:

-k keydef

[...]

除非指定了该选项,否则比较相等的行应按不存在-u任何选项-d-f-i-n或 的方式进行排序(但如果已指定,则仍然有效)并且行中的所有字节都对比较。仍然比较相等的行的写入顺序未指定-k-r

相关内容