
Estou no RHEL 6 usando BASH.
Estou tentando classificar algumas linhas de um arquivo por um número que está incorporado em um campo. O nome do arquivo é word.txt.
Este é o comando que estou usando:
sort -n -k4 word.txt
Esta é a saída que estou obtendo, não em ordem numérica:
INSERT INTO area_names VALUES(124,'NewYork');
INSERT INTO area_names VALUES(125,'NewYork');
INSERT INTO area_names VALUES(12,'NewYork');
Obviamente, a linha com apenas “12” deve ser a primeira.
O número após "VALUES(" pode ter qualquer comprimento
Como posso dizer ao sort para classificar o número entre "VALUES(" e "," ?
Posso recorrer a uma solução alternativa para colocar um espaço em branco após "VALUES(" nos dados, mas prefiro não fazer isso, a menos que seja a melhor opção.
Responder1
Experimente isto:
sort -t "(" -k2,2 -n word.txt
Saída
INSERT INTO area_names VALUES(12,'NovaIorque'); INSERT INTO area_names VALUES(124,'NovaIorque'); INSERT INTO area_names VALUES(125,'NovaIorque');
-kPOS1[,POS2] Especifique um campo de classificação que consista na parte da linha entre POS1 e POS2 (ou o fim da linha, se POS2 for omitido), _inclusivo_. Cada PDV tem o formato `F[.C][OPTS]', onde F é o número do campo a ser usado e C é o número do primeiro caractere do início do campo. Os campos e as posições dos caracteres são numerado começando com 1; uma posição de caractere zero em POS2 indica o último caractere do campo. Se `.C' for omitido de POS1, o padrão é 1 (início do campo); se omitido do POS2, o padrão é 0 (o final do campo). OPÇÕES são opções de ordenação, permitindo que chaves individuais sejam classificadas de acordo a regras diferentes; veja abaixo para obter detalhes. As chaves podem abranger vários Campos. Exemplo: Para classificar no segundo campo, use `--key=2,2' (`-k 2,2').