Perl 根据管道分隔的字符串提取多行
我正在编写一个Perl脚本,它将根据国家字段每3行提取一次,并将其分离为2个文本文件。 数据如下所示: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
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