2013-03-14 51 views
0

我正在編寫一個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| 

所有字段2等於JPN將接合在一起 輸出應爲文本文件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和新東東d有些意見讓我對此感到滿意。 感謝您的幫助我 乾杯!

回答

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; 
+0

'$/=民主基金;我的@data = split「\ n」,<>;'? '我的@數據= <>;'。但我不想一次讀完所有內容。只需讀取每次迭代所需的行數即可。 – Qtax 2013-03-14 07:40:44

+0

我的錯,感謝 – Alec 2013-03-14 07:43:01

+0

I''ll試試您的解決方案亞歷克 感謝的人 – Soncire 2013-03-14 23:32:35

0

我試圖與這個sed的:

sed -n -e '/JPN/,+2w file1' -e '/JPN/,+2!w file2' yourfile 
相關問題