Pergunta

Eu tenho um a.csv arquivo com conteúdo semelhante ao abaixo

a,b,c
a  ,aa,  a
a b, c, f
a , b, c
a b a b a,a,a
a,a,a
a aa ,a , t

Eu estou tentando classificá-lo usando sort -k1 -t, a.csv Mas ele está dando os seguintes resultados

a,a,a
a  ,aa,  a
a aa ,a , t
a b a b a,a,a
a , b, c
a,b,c
a b, c, f

O que não é o tipo real na 1ª coluna. O que estou fazendo de errado?

Foi útil?

Solução

Você tem que especificar a posição final para ser 1, também:

sort -k1,1 -t, a.csv

Outras dicas

Tentar dar um presente: sort -t, -k1,1 a.csv

O homem sugere que omitindo o campo final, ele irá classificar todos os caracteres a partir de n campo até o fim da linha:

-k POS1[,POS2]'
     The recommended, POSIX, option for specifying a sort field.  The
     field consists of the part of the line between POS1 and POS2 (or
     the end of the line, if POS2 is omitted), _inclusive_.  Fields and
     character positions are numbered starting with 1.  So to sort on
     the second field, you'd use `-k 2,2' See below for more examples.

Tente isto em vez disso:

sort -k 1,1 -t , a.csv

tipo lê -k 1 como "uma espécie de primeiro campo em diante." - assim, efetivamente desafiando o ponto de passar o argumento, em primeiro lugar

Isso está documentado no página man tipo e advertiu sobre na seção Exemplos:

Classificar numericamente no segundo campo e gravatas resolver por classificação alfabeticamente no terceiro e quarto caracteres de campo de cinco. Use `:' como o delimitador de campo:

$ sort -t : -k 2,2n -k 5.3,5.4

Note que se você tivesse escrito -k 2 vez de -k 2,2, sort teria usado todos caracteres a partir do segundo campo e estendendo-se para o fim do linha como o principal numérica chave. Para a grande maioria das aplicações, chaves que tratam abrangendo mais de um campo como numérico não vai fazer o que você esperar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top