Por linux espécie não está me dando os resultados desejados?
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?
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.