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 

관련 정보