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