0
我在一个文本文件中多行记录,我想用perl到重复数据删除:去重复多行记录,用Perl
记录由“#结束记录”字符串分隔,并期待这样的:
CAPTAIN GIBLET'S NEWT CORRAL 555 RANDOM ST TARDIS, CT 99999 We regret to inform you that we must repossess your pants in part due to your being 6 months late on payments. But mostly it's maliciousness. :) TOTAL DUE: $30.00 #end-of-record
这是我初步的尝试:
#!/usr/bin/perl -w
use strict;
{
local $/ = "#end-of-record";
my %seen;
while (my $record = <>) {
if (not exists $seen{$record}) {
print $record;
$seen{$record} = 1;
}
}
}
这是打印出每个记录......和重复记录。我哪里做错了?
UPDATE
上面的代码似乎工作。
这是做到这一点的一种方式。不过,您需要在'if'语句中使用'$ seen {$ record} = 1;'。另外,您可能需要执行一些处理,例如移动前导空白和尾随空白。记住,你必须匹配每个字符的记录字符,所以空白将影响记录是否被看到。 – chilemagic 2014-11-21 03:34:06
你永远不会将记录设置到散列,但检查其存在。所以它会一直返回false并打印记录。 – xtreak 2014-11-21 05:53:53
我添加了建议的代码,但它仍然打印所有记录...和重复项。 – Bubnoff 2014-11-21 17:22:42