input.dat
次のようなファイルがあります。
ZZZ 111
ABC 523
ABC 835
ADD 234
ZZZ 222
ABC 0007
2935
ABC 4
ABC 893
wdq
ZZZ 333
ABC 777
ABC 00
後で文字列を抽出することはできますABC
が、n 回目の出現ごとに取得する必要があります。したがって、正規表現だけでは区別できず、ループでこれを処理できると考えました。ABC の行で 1 つおきのエントリのみを取得するために、次のことを試しました。
#!/usr/bin/perl
use strict;
use warnings;
my $i;
my @grepped
open(INFILE,"input.dat") or die "$! Exiting.\n";
while (my $line = <INFILE>) {
if ($line =~ /^ZZZ (\d+)/){
push(@grepped,"$1\t")
};
$i=0;
for ($line =~ /^ABC (\d+)/){
$i+=1;
if($i==2){ push(@grepped,"$1\n") };
};
}
close(INFILE);
ループが正しく機能していません。その理由はわかりません。私は得ています:
111 523
835
222 0007
4
333 777
00
希望の代わりに:
111 835
222 4
333 00