Classificação numérica pelos valores da coluna

3

Por exemplo, eu tenho algum arquivo de teste e quero classificá-lo pelos valores da coluna. Depois

awk -F'[:,]' '{print $16}' test.json

Eu recebo a próxima saída para a coluna 16:

 123
 457
 68
 11
 939
 11
 345
 9
 199
 13745

Agora, quando quero classificá-lo numérico, eu uso

awk -F'[:,]' '{print $16}' test.json | sort -nk16

mas eu acabei de voltar não do tipo numérico ...

 11
 11
 123
 13745
 199
 345
 457
 68
 9
 939

Qual é a razão, eu achei que -n parâmetro é suficiente para o tipo numérico ....

    
por Guforu 18.09.2014 / 16:31

1 resposta

3

A saída de awk contém apenas uma coluna, portanto, nenhuma coluna 16.

Portanto, sort vê todas as chaves de ordenação vazias idênticas e o que você observa é o resultado da última classificação de resort (ordenação lexical na linha inteira) que você pode desativar com a opção -s em algumas implementações. >

Aqui você quer:

awk -F'[:,]' '{print $16}' test.json | sort -n

Agora, se você quiser classificar o arquivo na coluna 16 th , tome cuidado, sort suporta apenas um delimitador de coluna de caractere, então você precisa pré-processar a entrada:

sed 's/[:,]/&+/g' test.json | sort -t+ -k16,16n | sed 's/\([:,]\)+//g'

Aqui, adicionando um + a cada : ou , , classificando com + como o delimitador da coluna e removendo o + posteriormente.

    
por 18.09.2014 / 16:49