Tentar classificar em dois campos primeiro é o segundo critério

3

Estou tentando classificar em várias colunas um arquivo com a classificação GNU.

O formato do arquivo de origem tmp / file.txt é:

03A12345679   2014-09-30-00.00.01.00
  • "03" = > primeira coluna
  • "A" = > separador de campo
  • "12345679" = > segunda coluna
  • "2014-09-30-00.00.01.00" = > outra coluna (não classificada)

Eu tentei este comando:

sort --field-separator="A" -k2,11 -k1,2 tmp/file.txt > tmp/file_out.txt

Com:

  • --field-separator="A" = > separador de campo é "A"
  • -k2,11 = > a segunda coluna é o primeiro tipo ("12345679")
  • -k1,2 = > a primeira coluna é o segundo tipo ("03")

Mas no resultado a classificação não está correta (o "03" está antes das linhas "01" e "02"):

03A12345679   2014-09-30-00.00.01.000000-0000
01A12345679   12345679  132132155VDVLDLV
02A12345679   FONDSEURO   000012664,120000000M
02A12345679   FR09999956570000009999,999990000F
01A12345680   472958519598601200000000047295824
02A12345680   122121EUR     0000099999,370000000M

Eu quero ter esse resultado:

01A12345679   12345679  132132155VDVLDLV
02A12345679   FONDSEURO   000012664,120000000M
02A12345679   FR09999956570000009999,999990000F
03A12345679   2014-09-30-00.00.01.000000-0000
01A12345680   472958519598601200000000047295824
02A12345680   122121EUR     0000099999,370000000M

Como posso fazer isso?

    
por mr_peck 19.12.2014 / 13:57

2 respostas

4

Você parece estar misturando posições de campo e posições de personagem. Não há necessidade de dividir em A ; com a classificação GNU, você pode classificar um intervalo de caracteres dentro do primeiro campo delimitado por espaço:

$ sort -k1.4,1.11 -k1.1,1.2 file
01A12345679   12345679  132132155VDVLDLV
02A12345679   FONDSEURO   000012664,120000000M
02A12345679   FR09999956570000009999,999990000F
03A12345679   2014-09-30-00.00.01.000000-0000
01A12345680   472958519598601200000000047295824
02A12345680   122121EUR     0000099999,370000000M
    
por 19.12.2014 / 14:07
2

Use -g (compare de acordo com o valor numérico geral) para classificar:

sort --field-separator="A" -g -k2,11 -k1,2 tmp/file.txt > tmp/file_out.txt
    
por 19.12.2014 / 14:01

Tags