作者rosepain (掘)
看板Perl
标题Re: [问题] 档案内容比对
时间Mon Apr 19 22:01:00 2010
※ 引述《jammy8 (jay)》之铭言:
: 请教前辈们
: 如果我有两个档案内容要做差异比对,
: 比如两个档案分别为/tmp/20100414.log 和 /tmp/20100413.log
: 若有更新的行才做输出到新的档案,
: 请问该用何种方式会较好?
: 因为我是想到用shell的diff去做比对,
: 但比对後的档案在行会有 > 的输出,
: 而我不希望有 > 的输出,
: 所以希望前辈们能给予指教...谢谢
我会用二个Hash去比较,大概如下
open( F, 'file1');
my @lines1=<F>;
close(F);
my $h1 = undef;
my $ndx = 0;
while (defined $lines1[$ndx])
{
chomp $lines1[$ndx];
$h1->{$lines1[$ndx]} = 1;
$ndx++;
}
open( F,'file2');
my @lines2=<F>;
close(F);
my $h2 = undef;
my $ndx = 0;
while(defined $lines2[$ndx])
{
chomp $lines2[$ndx];
$h2->{$lines[$ndx]} = 1;
$ndx++;
}
open( F,'>'.'OF.TXT');
foreach my $key( keys %$h1 )
{
if ( !defined $h2->{$key} ) {
print F $key.chr(0xd).chr(0xa);
$h2->{$key} = 99;
}
}
foreach my $key( keys %$h2 )
{
if ( $h2->{$key} == 1 )
{
if ( !defined $h1->{$key} )
{
print F $key.chr(0xd).chr(0xa);
}
}
}
close(F);
大概就将...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.165.231.31
1F:→ kornelius:为什麽要写这麽多行呢 *ponders* 04/20 04:23
2F:推 kornelius:用 grep 把有 > 的行拿出来然後 sed 拿掉就好啦 XD 04/20 04:29