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 

おすすめ記事