0

您好,我有 2 个内容混乱的文件。例如,文件 1 可能有大约 100 个字符串,一个在另一个之下,文件 2 有 200 个。

就像是

文件1 a-->001 b-->002 c-->003 d-->004 e-->005
文件2 b-->001 c-->003 d-->009 e-->005 z-->026 y-->025 0-->15 p-->16 a--> 001

我希望它像这样安排,以便我可以看到相应的差异

文件1 a-->001 b-->002 c-->003 d-->004 e-->005
文件2 a-->001 b-->001 c-->003 d-->009 e-->005 z-->026 y-->025 0-->15 p-->16

我尝试了排序命令 sort file1 和 sort file2 和 diff -y -suppress-common-lines file1 file2 >diff.txt 但是当我说 10 个以 a 开头的单词时,这个就搞砸了。所以它会显示所有 10 个 a 后跟 b .. 那么还有其他方法可以做到这一点吗?

4

1 回答 1

0

您可以使用这个 perl 脚本:

#!/usr/bin/perl
use strict;

if ($#ARGV != 1)
{
    print "\nUsage: test.pl File1 File2\n\n";
    exit();
}

my $file1 = getFile($ARGV[0]);
my $file2 = getFile($ARGV[1]);

my $r = {};
while (my ($k, $v) = each %$file1)
{
    if (!exists($file2->{$k}))
    {
        $r->{$k} = "[$v, undef]";
    }
    elsif ($v ne $file2->{$k})
    {
        $r->{$k} = "[$v, $file2->{$k}]";
    }
    delete $file2->{$k};
}
while (my ($k, $v) = each %$file2)
{
    $r->{$k} = "[undef, $v]";
}

foreach (sort keys %$r)
{
    print "$_ -> $r->{$_}\n";
}

sub getFile($)
{
    my $f;
    return open($f, shift()) ? return { (join('', <$f>) =~ /[\s\n\r^](\w+)\s*-+>\s*(\d+)/g) } : {};
}
于 2013-04-19T15:05:30.627 回答