0
130723,-001,1.14,130725,+002,4.20,130731,+006,1.52,130728
130725,+002,4.20,130731,+006,1.52,130728,-003,0.00,130731
130731,+006,1.52,130728,-003,0.00,130731,+003,1.00,130731
130728,-003,0.00,130731,+003,1.00,130731,+000,0.00,130729
130731,+000,0.00,130729,-002,1.00,130728,-001,0.00,130728

上記はログファイルの一部です。ログ ファイルの各行は常に同じ長さであり、上記のように同じパターンを持っています。ファイルを読み取り、各行の位置 42 から 46 が特定の期待を満たすすべての行を配列に配置する必要があります。上記の場合、次の数値が表示されます。

+006 -003 +003 +000 -001

誰かが私を正しい方向に向けることができますか?

編集 :

彼の提案のためにアモンに感謝します。

将来の参考のために、このコードで終了しました。

open (FILE, $filename) or die "Couldn't open log: $!";
while (<FILE>) { 
if ((split /,/)[8] == "+003"){
push @data, $_ }}

close FILE;

foreach(@data)
{
    print "$_\r\n";
}

このファイルが非常に大きくなった場合、プロセスを迅速に最適化するにはどのような手順を実行すればよいでしょうか?

4

3 に答える 3

0

試す

perl -F, -ane '$F[7] eq "+003" and push @l,$_; END { print for @l }'<<XXX
130723,-001,1.14,130725,+002,4.20,130731,+006,1.52,130728
130725,+002,4.20,130731,+006,1.52,130728,-003,0.00,130731
130731,+006,1.52,130728,-003,0.00,130731,+003,1.00,130731
130728,-003,0.00,130731,+003,1.00,130731,+000,0.00,130729
130731,+000,0.00,130729,-002,1.00,130728,-001,0.00,130728
XXX

出力:

130731,+006,1.52,130728,-003,0.00,130731,+003,1.00,130731
于 2013-05-07T22:15:24.670 に答える