Comando de ordenação do Linux: como classificar um número incorporado em um campo?

0

Estou no RHEL 6 usando o BASH.

Estou tentando classificar algumas linhas em um arquivo por um número 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 recebendo, 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 depois de "VALUES (" pode ser de qualquer tamanho

Como posso dizer ao tipo para classificar o número entre "VALUES (" e ","?

Posso recorrer a uma solução alternativa de colocar um espaço em branco depois de "VALUES (" nos dados, mas prefiro não fazer isso, a menos que seja a melhor opção.

    
por user787832 10.03.2015 / 22:26

1 resposta

2

Tente isto:

 sort -t "(" -k2,2 -n word.txt

Saída

INSERT INTO area_names VALUES(12,'NewYork');
INSERT INTO area_names VALUES(124,'NewYork');
INSERT INTO area_names VALUES(125,'NewYork');
-k POS1[,POS2]

     Specify a sort field that consists of the part of the line between
     POS1 and POS2 (or the end of the line, if POS2 is omitted),
     _inclusive_.

     Each POS has the form 'F[.C][OPTS]', where F is the number of the
     field to use, and C is the number of the first character from the
     beginning of the field.  Fields and character positions are
     numbered starting with 1; a character position of zero in POS2
     indicates the field's last character.  If '.C' is omitted from
     POS1, it defaults to 1 (the beginning of the field); if omitted
     from POS2, it defaults to 0 (the end of the field).  OPTS are
     ordering options, allowing individual keys to be sorted according
     to different rules; see below for details.  Keys can span multiple
     fields.

     Example:  To sort on the second field, use '--key=2,2' ('-k 2,2').
    
por 10.03.2015 / 22:34

Tags