Como ordenar um arquivo por uma coluna que é uma mistura de caracteres numéricos, alfabéticos e de pontuação?

1

Eu tenho um arquivo de texto que é da forma -

b   SN:2
d   SN:5
f   SN:10
g   SN:11
h   SN:15
i   SA:3
j   SN:1
k   SN:4

E eu quero classificar pela segunda coluna, na verdade, o valor numérico na segunda coluna. Eu tentei -

$ sort -n -k2,2 file
$ sort -k2.4,2.5n file

mas nada parece funcionar.

    
por J Verma 26.10.2014 / 18:06

2 respostas

8

Porque você não usa a opção -t (ou -b com tipo GNU ), então você deve contar desde o início dos espaços principais. POSIX definido sort -k EXTENDED DESCRIPTION como:

A field comprises a maximal sequence of non-separating characters and, in 
the absence of option -t, any preceding field separator

Então você deve usar:

$ sort -nk2.7 file
j   SN:1
b   SN:2
i   SA:3
k   SN:4
d   SN:5
f   SN:10
g   SN:11
h   SN:15

Mas você pode usar : como separador de campo e, em seguida, classificar numérico por segundo campo:

$ sort -t':' -nk2 file
j   SN:1
b   SN:2
i   SA:3
k   SN:4
d   SN:5
f   SN:10
g   SN:11
h   SN:15
    
por 26.10.2014 / 18:17
2

Apenas para você, case o man sort

If neither -t nor -b is in effect, characters in a field are counted from the beginning of the preceding whitespace.

Então

sort -k2.7n file

fará o trabalho

DICA!

Se quiser contar a partir da linha que você começa, use -t para aceitar char ausente para tratar a linha como um campo:

sort -t% -k1.8n file
    
por 26.10.2014 / 18:25

Tags