Comando sort do Linux: como classificar um número incorporado em um campo?

Comando sort do Linux: como classificar um número incorporado em um campo?

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').

informação relacionada