Perl 根据管道分隔的字符串提取多行

Perl 根据管道分隔的字符串提取多行,perl,Perl,我正在编写一个Perl脚本,它将根据国家字段每3行提取一次,并将其分离为2个文本文件。 数据如下所示: INVHDR|JPN| INVDET|4254| INVTOT|3325| INVHDR|AUS| INVDET|9685| INVTOT|1431| INVHDR|JPN| INVDET|3368| INVTOT|1126| INVHDR|NZL| INVDET|1458| INVTOT|5698| 所有等于JPN的字段2将合并在一起 输出应为文本文件1 INVHDR|JPN| INVDE

我正在编写一个Perl脚本,它将根据国家字段每3行提取一次,并将其分离为2个文本文件。 数据如下所示:

INVHDR|JPN|
INVDET|4254|
INVTOT|3325|
INVHDR|AUS|
INVDET|9685|
INVTOT|1431|
INVHDR|JPN|
INVDET|3368|
INVTOT|1126|
INVHDR|NZL|
INVDET|1458|
INVTOT|5698|
所有等于JPN的字段2将合并在一起 输出应为文本文件1

INVHDR|JPN|
INVDET|4254|
INVTOT|3325|
INVHDR|JPN|
INVDET|3368|
INVTOT|1126|
以及没有JPN将放在一起的另一个文本文件 对于其他输出,应为文本文件2

INVHDR|AUS|
INVDET|9685|
INVTOT|1431|
INVHDR|NZL|
INVDET|1458|
INVTOT|5698|
我刚学perl,需要一些selp来教我这方面的知识。 谢谢你帮我 干杯

试试这个:

use strict;
use warnings;

open my $output1, '>output1.txt'
    or die "Can't open output1.txt for writing: $!\n";

open my $output2, '>output2.txt'
    or die "Can't open output2.txt for writing: $!\n";

my @data = <>;
for (my $i = 0; $i < @data; $i += 3) {
    my $result = join q{}, @data[$i..$i+2];
    my $output = $data[$i] =~ /JPN\|$/ ? $output1 : $output2;
    print $output $result;
}

close $output1;
close $output2;
使用严格;
使用警告;
打开我的$output1,“>output1.txt”
或“无法打开output1.txt进行写入:$!\n”;
打开我的$output2,“>output2.txt”
或“无法打开output2.txt进行写入:$!\n”;
我的@data=;
对于(我的$i=0;$i<@data;$i+=3){
my$result=join q{},@data[$i..$i+2];
my$output=$data[$i]=~/JPN\|$/?$output1:$output2;
打印$output$result;
}
关闭$output1;
关闭$output2;

我尝试了以下方法:

sed -n -e '/JPN/,+2w file1' -e '/JPN/,+2!w file2' yourfile

$/=undf;我的@data=split“\n”<代码>我的@data=。但我不想一次读完所有的内容。只要在每次迭代中读取所需的行数即可。
perl this_script.pl your_data.txt