Posição de r antes e depois de k em Sort

1

Eu tentei os dois scripts a seguir para classificar um arquivo CSV

$ sort -t"," -k1,1 -k3,3 -k4,4 -k6,6r myFile.csv 

e

$ sort -t"," -k1,1 -k3,3 -k4,4 -rk6,6 myFile.csv 

Eu encontrei o -r antes do -k reverter não apenas a 6ª coluna, mas também a primeira coluna, mantendo -r após k inverte apenas a sexta coluna. Por um lado, eu não entendo porque colocar -r antes e depois de -k faz a diferença. Além disso, não consigo encontrar uma explicação em help ou man .

    
por KMC 11.10.2015 / 20:40

2 respostas

1

Quando você usa -rk6,6 , a opção -r é aplicada globalmente, ou seja, para todas as chaves. É como fazer:

sort -t"," -r -k1,1 -k3,3 -k4,4 -k6,6 myFile.csv 

Por outro lado, -k6,6r aplica r ao sexto campo, ou seja, é aplicado individualmente.

    
por 11.10.2015 / 20:56
1

Como a página de manual diz:

Sort keys can be specified using the options:

-k  keydef
      The keydef argument is a restricted sort key  field  definition.
      The format of this definition is:

      field_start[type][,field_end[type]]

where  field_start  and  field_end  define  a key field restricted to a
portion of the line (see the EXTENDED DESCRIPTION section), and type is
a  modifier  from  the list of characters 'b' , 'd' , 'f' , 'i' , 'n' ,
'r' .

-k é uma definição restrita . As opções que você especifica após -k são apenas para essa definição de campo. -r , por outro lado, é uma opção global. Mais uma vez, citando a página do manual:

The following options shall override the default ordering  rules.  When
ordering  options  appear  independent of any key field specifications,
the requested field ordering rules shall be  applied  globally  to  all
sort  keys.  When  attached  to  a specific key (see -k), the specified
ordering options shall override all global ordering  options  for  that
key.
    
por 11.10.2015 / 20:56