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。
答案 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提供的答案,以获得正确的解释。