您好我有2个内容混乱的文件。 File1可能有一个低于另一个的100个字符串,而文件2例如有200个。
像
这样的东西File1 a-->001 b-->002 c-->003 d-->004 e-->005 File2 b-->001 c-->003 d-->009 e-->005 z-->026 y--> 025 0-->15 p-->16 a--> 001
我希望它像这样安排,以便我能看到相应的差异
File1 a-->001 b-->002 c-->003 d-->004 e-->005 File2 a-->001 b-->001 c-->003 d-->009 e-->005 z-->026 y--> 025 0-->15 p-->16
我尝试了sort命令sort file1和sort file2以及diff -y -suppress-common-lines file1 file2> diff.txt但是当我说一个以a开头的10个单词时,这个就搞砸了。因此它将显示所有10个a后跟b ..那么有没有其他方法可以做到这一点?
答案 0 :(得分: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) } : {};
}