我有一个看起来像的文件
姓名|约翰|东京|日本 年龄|32|M 信息|单身|专业|IT 名称|标记|马尼拉|PH 年龄|37|M 信息|已婚|专业|业务流程外包 姓名|萨曼莎|悉尼|澳大利亚 年龄|37|F 信息|已婚|专业|离岸 姓名|卢克|东京|日本 年龄|27|M 信息|单身|专业|IT
我想按国家/地区分开记录。我已将每一行存储到数组变量中@fields
my @fields = split(/\|/, $_ );
$fields[3]
作为我排序的依据。我希望它分成 2 个输出文本文件
输出文本文件 1:
NAME|JOHN|TOKYO|JPN
AGE|32|M
INFO|SINGLE|PROFESSIONAL|IT
NAME|LUKE|TOKYO|JPN
AGE|27|M
INFO|SINGLE|PROFESSIONAL|IT
输出文本文件 2
NAME|MARK|MANILA|PH
AGE|37|M
INFO|MARRIED|PROFESSIONAL|BPO
NAME|SAMANTHA|SYDNEY|AUS
AGE|37|F
INFO|MARRIED|PROFESSIONAL|OFFSHORE
将来自 JPN 的所有内容输出文本 1 和非日本国家/地区输出文本文件 2
这是试图解决的代码
use strict;
use warnings;
use Data::Dumper;
use Carp qw(croak);
my @fields;
my $tmp_var;
my $count;
;
my ($line, $i);
my $filename = 'data.txt';
open(my $input_fh, '<', $filename ) or croak "Can't open $filename: $!";
open(OUTPUTA, ">", 'JPN.txt') or die "wsl_reformat.pl: could not open $ARGV[0]";
open(OUTPUTB, ">", 'Non-JPN.txt') or die "wsl_reformat.pl: could not open $ARGV[0]";
my $fh;
while (<$input_fh>) {
chomp;
my @fields = split /\|/;
if ($fields[0] eq 'NAME') {
for ($i=1; $i < @fields; $i++) {
if ($fields[3] eq 'JPN') {
$fh = $_;
print OUTPUTA $fh;
}
else {
$fh = $_;
print OUTPUTB $fh;
}
}
}
}
close(OUTPUTA);
close(OUTPUTB)
仍然没有运气:(