Perl

如何使 perl 腳本更智能地解析塊?

  • December 2, 2015

我有一個~/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 完成此任務的任何指示。

我會寫:

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 

引用自:https://unix.stackexchange.com/questions/246715