我有条目的文件: (----)Manish Garg 74163:V2.0.1_I3_SIT:键击的KeyStroke Logger解密文件显示与CCM时间相差4小时。 - 74163:键击的KeyStroke Logger解密文件显示与CCM时间相差4小时。 2014年7月4日 我想查找id“74163”的唯一计数或一行中的任何id。 目前它的输出为: updated_workitem值> “74163” 计数> “2” 但我希望计数值为1.(我不想在计数中包含重复的条目)
My code is
my $workitem;
$file = new IO::File;
$file->open("<compare.log") or die "Cannot open compare.log";
@file_list = <$file>;
$file->close;
foreach $line (@file_list) {
while ($line =~ m/(\d{4,}[,|:])/g ){
@temp = split(/[:|,]/, $1);
push @work_items, $temp[0];
}
}
my %count;
my @wi_to_built;
map { $count{$_}++ } @work_items;
foreach $workitem (sort keys (%count)) {
chomp($workitem);
print "updated_workitem value> \"$workitem\"\n";
print "Count> \"$count{$workitem}\"\n";
}
答案 0 :(得分:1)
使用哈希来跟踪特定行中找到的唯一ID:
foreach my $line (@file_list) {
my %line_ids;
while ($line =~ m/(\d{4,})[,|:]/g ){
$line_ids{$1} = 1; # Record unique ids
}
push @work_items, keys %line_ids; # Save the ids
}
注意,我已经稍微更改了您的正则表达式,因此您不需要split
到临时数组。
答案 1 :(得分:0)
您可以在执行map { $count{$_}++ } @work_items;
@work_items = uniq(@work_items);
sub uniq {
my %seen;
grep !$seen{$_}++, @_;
}