如何使用Perl将文本文件拆分为块?

时间:2012-07-15 12:51:01

标签: arrays perl parsing

我有一个包含这样的行的数据文件:

A1 2 3 4 5
B 1 2 4
B 7 8 9
A6 7 8 9
B 1 2 3
B 5 6 7
A3 6 9 7
B 2 3 3
B 5 6 6

使用Perl,当解析器遇到/^A/时,如何将文件拆分成一组数组(或任何其他数据结构)? 所以我最终得到了

ARRAY1:

A1 2 3 4 5
B 1 2 4
B 7 8 9

数组2:

A6 7 8 9
B 1 2 3
B 5 6 7

非常感谢。

2 个答案:

答案 0 :(得分:4)

我不得不重写答案(重写问题后)

@arrays = ();
while (<>) {
  push(@arrays, []) if /^A/;
  push(@{$arrays[-1]}, $_)
}

答案 1 :(得分:0)

当我希望$/不仅仅是一个字符串时,它有时是这样的。不过,有一些解决方法。

可能会将文件篡改并使用前瞻断言进行处理。下面的示例只打印用<< >>分隔的每个字符串,但无论您想对数据做什么,基本思路都是相同的:

$ perl -0777 -wE 'say "<<$_>>" for split /(?=^A)/m, <>' file.txt
<<A1 2 3 4 5
B 1 2 4
B 7 8 9
>>
<<A6 7 8 9
B 1 2 3
B 5 6 7
>>
<<A3 6 9 7
B 2 3 3
B 5 6 6
>>