Como posso fazer uma análise de script perl bloquear de maneira mais inteligente?

1

Eu tenho um arquivo ~/bigfile.txt que consiste em milhares de blocos de texto do formulário

BLOCK NUMBER : <block>
SIZE : <size1> <size2>
EXTRA : <extraNumber>
<block of text>

Para este exemplo, diga

$ cat ~/bigfile.txt
BLOCK NUMBER : 1
SIZE : 7 6
EXTRA : 0
john paul
george ringo

BLOCK NUMBER : 2
SIZE : 7 3
EXTRA : -10
i am
the
walrus

BLOCK NUMBER : 3
SIZE : 4 3
EXTRA : -1024
hello world

Estou tentando escrever um script que separe cada bloco em um arquivo separado denominado <block>-block.txt , aninhado em subdiretórios de ~/data/ indexados por <size1> e <size2> . Por exemplo, a execução do script deve resultar em

$ tree ~/data/
~/data/
|- 4-size1
   |- 3-size2
      |- 3-block.txt
|- 7-size1
   |- 3-size2
      |- 2-block.txt
   |- 6-size2
      |- 1-block.txt

Atualmente, tenho um script que simplesmente despeja cada bloco em um arquivo separado em ~/data/ , mas não consigo descobrir como alterá-lo.

Eu posso postar meu roteiro atual se isso ajudar, mas suspeito que ele é bastante ineficiente e não é adequado para lidar com esse tipo de tarefa organizacional.

Eu gostaria de receber sugestões sobre como realizar essa tarefa com o perl.

    
por Brian Fitzpatrick 02.12.2015 / 00:12

1 resposta

1

Eu escreveria:

perl -MFile::Path=make_path -00 -ne '
    ($block) = /BLOCK NUMBER : (\d+)/; 
    @sizes = /SIZE : (\d+) (\d+)/; 
    $dir = sprintf "data/%d-size1/%d-size2", @sizes;
    make_path $dir;
    if (open $fh, ">", "$dir/$block-block.txt") {
        print $fh $_;
        close $fh;
    }
' bigfile.txt 
    
por 02.12.2015 / 01:01

Tags