Eu preciso dividir um arquivo com muitas trajetórias em arquivos individuais

0

Eu tenho um arquivo chamado Au7.ANI que tem o seguinte formato:

Toda vez que um número 37 aparece como cabeçalho, significa que é um novo conjunto de coordenadas que o segue. Isso é repetido no arquivo 2.000 vezes.

O que eu quero fazer é dividir este arquivo em muitos arquivos adicionando o 37 no topo de cada arquivo com o respectivo conjunto de coordenadas xyz que o seguem.

Isso deve produzir 2.000 arquivos, pois há 2.000 coordenadas xyz individuais nesse arquivo.

Como posso fazer isso e ter todos os arquivos chamados coord.xyz_1, coord.xyz_2, etc, até coord.xyz_2000?

Obrigado!

    
por Svetlana Gelpi 01.08.2016 / 19:53

1 resposta

1

Eu provavelmente alcançaria o csplit em vez do perl: é difícil dar uma resposta precisa (testada) desde que você postou uma imagem png do seu arquivo em vez do texto real, mas algo como

csplit -f 'coord.xyz_' -b '%d' yourfile '/^[[:space:]]*37$/' '{*}'

onde

  • -f 'coord.xyz_' define o prefixo do nome do arquivo de saída
  • -b '%d' define o formato de sufixo numérico de saída para dígitos decimais não-preenchidos
  • a expressão regular /^[[:space:]]*37$/ corresponde a 37 , opcionalmente precedida por espaço em branco
  • {*} diz para repetir o padrão anterior quantas vezes for possível

Observe que a expressão regular pode ser simplificada com base no conteúdo real do seu arquivo: por exemplo, se o marcador 37 for sempre recuado por uma única guia, você poderá reduzi-lo para /^\t37$/ .

Se você deseja implementar algo equivalente em perl (conforme sua tag), então, com base nessa sugestão Como posso dividir um arquivo de texto em vários arquivos de texto? você poderia tentar

perl -ne 'open(F, ">", "coord.xyz_".++$n) if /[[:space:]]*37/; print F;' yourfile
    
por steeldriver 02.08.2016 / 00:53