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

时间:2013-03-14 06:20:26

标签: perl

我正在编写一个Perl脚本,它将根据country字段提取每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的新手,需要一些自我来帮助我。 谢谢你的协助 干杯!

2 个答案:

答案 0 :(得分:1)

试试这个:

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;

答案 1 :(得分:0)

我试过这个:

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