如何使 perl 脚本解析块更智能?

如何使 perl 脚本解析块更智能?

~/bigfile.txt我有一个由数千个以下形式的文本块组成的文件

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

对于这个例子来说

$ 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

我正在尝试编写一个脚本,将每个块分隔成一个名为 的单独文件<block>-block.txt,嵌套在~/data/<size1>和索引的子目录中<size2>。例如,运行脚本应该会导致

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

目前我有一个脚本,只需将每个块转储到一个单独的文件中,~/data/但我不知道如何更改它。

如果有帮助的话,我可以发布我当前的脚本,但我怀疑它效率很低,并且不适合解决此类组织任务。

如果有任何有关如何使用 Perl 完成此任务的指示,我将不胜感激。

答案1

我会写:

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 

相关内容