2016-07-06 52 views
2

sort似乎不喜歡我的關鍵規範。爲什麼?Gnu排序:字段規範中的流浪字符

~/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,而停止 的位置默認爲該行的結尾。

由於KEYDEF中的.C和OPTS部分是可選的,因此密鑰規範F,F,F(即只是字段編號)應該是正確的。我做錯了什麼?

順便說一句,我的環境是Cygwin,運行Z-shell。

回答

3

-k arg中的兩個字段是開始和結束字段。您可以指定-k任意數量的時間,以在多個鍵上進行排序。因此,-k 1,1 -k 2,2 -k 3,3將首先在字段1上排序,然後字段2然後是字段3.

+0

非常感謝,最終得到它! – user1934428

1

糟糕,我應該更真實地採取手冊頁。對於KEYDEF定義陳述

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

和不

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

這意味着只有1或2個字段可以被提供,而不是一個任意數。這解釋了錯誤。

作爲一個方面說明,我相信手冊頁仍然是一個錯誤。 KEYDEF定義表示的停止位置默認爲行的結束。這不可能是真的,可以嗎? IMO應該是停止位置默認爲字段的結束

更新:我的解釋不正確。請參閱@tedtoal提供的答案以獲得正確的解釋。