Gnu sort:字段规范中的杂散字符

时间:2016-07-06 10:05:53

标签: linux shell gnu gnu-coreutils

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是一个字段 数字和C字段中的字符位置;两者都是原点1和止损 position默认为行的结束。

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

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

2 个答案:

答案 0 :(得分:3)

-k arg中的两个字段是START和END字段。您可以指定-k ANY NUMBER OF TIMES,以对多个键进行排序。因此,-k 1,1 -k 2,2 -k 3,3将首先在字段1上排序,然后是字段2,然后是字段3。

答案 1 :(得分:1)

哎呀,我应该更直接地阅读手册页。 KEYDEF的定义是

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

而不是

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

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

作为旁注,我相信 仍然是手册页中的错误。 KEYDEF定义表示停止位置默认为行的结束。这不可能是真的,可以吗? IMO它应该停止位置默认为字段的结束

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