Como o sinalizador -k funciona no comando sort? [duplicado]

0

Eu tenho um conjunto de dados como este:

manufacturer,model,year,mileage,price
plym fury 1970 73 2500 
chevy malibu 1999 60 3000
ford mustang 1965 45 10000
volvo s80 1998 102 9850
ford thundbd 2003 15 10500
chevy malibu 2000 50 3500
bmw 315i 1985 115 450
honda accord 2001 30 6000
ford taurus 2004 10 17000
toyota rav4 2002 180 750
chevy impala 1985 85 1550
ford explor 2003 25 9500

Eu devo classificar o arquivo pelo fabricante e, em seguida, pelo preço dentro de um fabricante.

O livro diz que esse comando fará isso:

sort -t ' '  a -k1,1 -k5

Minha pergunta é que qual é a diferença entre o comando acima e este comando

sort -t ' '  a -k1 -k5

Eu verifiquei a saída de ambos do comando sozinho com -k1 e -k1,1 como este

sort -t ' '  a -k1,1 

sort -t ' '  a -k1

e os dois eram iguais, e por que é que, quando se adiciona -k5 , a saída nesses dois casos é diferente.

Não consigo entender a diferença entre -k1 e -k1,1 adequadamente em termos de funcionamento,

Alguém pode me explicar isso com o contexto do conjunto de dados fornecido.

    
por dwwdw 06.02.2013 / 23:09

1 resposta

2

A página man diz:

   -k, --key=POS1[,POS2]
          start  a  key at POS1 (origin 1), end it at POS2 (default end of
          line).  See POS syntax below

Isso significa que, se você não especificar, implicitamente, especifique todas as colunas a seguir. Se você especificar várias colunas, a classificação só será ordenada por uma coluna se elas forem iguais na coluna anterior.

Veja este exemplo:

$ cat test
1 3 1
1 2 3
1 1 2
$ sort test -k 1 -k3
1 1 2
1 2 3
1 3 1
$ sort test -k 1,1 -k3
1 3 1
1 1 2
1 2 3

O primeiro tipo diz: Primeiro, classifique na coluna 1,2 e 3, e se eles são do mesmo tipo na coluna 3. Obviamente, classificar em 1,2,3 já é suficiente para um pedido final.

O segundo tipo diz: Primeiro, classifique na coluna 1 para 1 (ou seja, apenas 1) e caso a ordem ainda não esteja clara, classifique na coluna 3. Agora, a ordenação não conseguirá encontrar um pedido, observando a coluna 1 e irá classificar pela coluna 3 também.

    
por 06.02.2013 / 23:45