Classificar arquivo de texto de blocos

1

Existem muitas ferramentas que classificarão um arquivo de texto com base na suposição de que a unidade de interesse é a linha, mas há alguma que funcione em blocos?

Exemplo:

name = Mercury
order = 1
mass = 0.06

name = Venus
order = 2
mass = 0.82

name = Earth
order = 3
mass = 1

Existe uma ferramenta que ordenaria a lista de planetas opcionalmente por nome, massa ou ordem do sol, tomando como entrada e produzindo como saída um arquivo de texto com cada registro sendo um bloco como o descrito acima?

    
por rwallace 02.12.2010 / 14:19

1 resposta

2

Para arquivos que cabem na memória, você pode usar o Perl, você pode definir o separador de registro de entrada.

 perl -e '$/="\n\n"; print sort <>' t.txt

Se o arquivo for grande demais para a memória, mas você tiver uma quantidade igual de espaço livre em disco, poderá fazer uma classificação em três etapas:

  • use perl para mesclar linhas de cada registro
  • classificar
  • use perl para dividir as linhas de cada registro

Para classificar pelo valor de um dos atributos, eu leria os dados em uma estrutura de dados adequada, como uma matriz de hashes AoH e defina um comparador como descrito em perldoc -f sort

Alternativamente, eu faria

  • Use perl para converter para CSV apenas de valores
  • classificar
  • Use perl para converter CSV de volta para registros de múltiplas linhas com pares nome = valor

Provavelmente seria melhor fazer todo o trabalho em Perl.

Outras linguagens de programação estão disponíveis.

    
por 02.12.2010 / 15:33