Gnu 排序:字段规范中的杂散字符

Gnu sort: stray characters in field specification

sort 似乎不喜欢我的关键规范。为什么?

~/tmp $ sort --version
sort (GNU coreutils) 8.25
Packaged by Cygwin (8.25-1)
~/tmp $ echo 'a;b;c;d;e;f;g'|sort --field-separator=';' --key=1,5,2                                          
sort: stray character in field spec: invalid field specification '1,5,2'

来自手册页:

-k, --key=KEYDEF : 通过键排序; KEYDEF 给出位置和类型

KEYDEF为F[.C][OPTS][F[.C][OPTS]]为起止位置,其中F为字段 number 和 C 字段中的字符位置;都是起点 1,终点 位置默认为行尾。

由于 KEYDEF 中的 .C 和 OPTS 部分是可选的,因此密钥规范 F、F、F(即仅字段编号)应该是正确的。我做错了什么?

BTW,我的环境是Cygwin,运行 Z-shell.

糟糕,我应该从字面上理解手册页。 KEYDEF 的定义是

F[.C][OPTS][,F[.C][OPTS]]

而不是

F[.C][OPTS][,F[.C][OPTS]...]

这意味着只能提供 1 或 2 个字段,而不是任意数字。这解释了错误。

附带说明一下,我相信 手册页中仍然存在错误。 KEYDEF 定义表明 停止位置默认为 行的 结束 。这不可能是真的,不是吗? IMO 它应该是 停止位置默认为 字段的 结束 .

更新:我的解释不正确。请参阅@tedtoal 提供的答案以获得正确的解释。

-k arg 中的两个字段是开始和结束字段。您可以指定 -k 任意次数,以对多个键进行排序。因此,-k 1,1 -k 2,2 -k 3,3 将首先在字段 1 上排序,然后是字段 2,然后是字段 3。