我这里有两个文件(文件 1 和文件 2)。我想从两个文件中匹配如下所示的粗体名称。但是我需要以文件 1 格式打印那些不匹配的数据。我一直在尝试下面的代码,但这不是我想要的结果。匹配后如何以文件1格式打印那些不匹配的数据?
文件 1
ID **alan135/xkr** $work(b05bfn00un0c3)/b05bfn00un0c3 ; #<= b05bfn00un0d0 Size:5848.270996
ID **John06/ext** $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID **lily099/poli** $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID **sam012/pp** $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
ID **lily099/poli** $wwrk(b05bfn00ld0p8)/b05bfn00ld0p8 ; #<= b05bfn00ld0s0 Size:INFINITY
ID **Steve9018** $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 Size:INFINITY
文件 2
Accept => **John06/ext** Max
Accept => **vivian788/ppr** Maxcap
Accept => **suzan645/pp** Min
Accept => **lily099/poli** Max
Accept => **Nick5670/uu** Max
Accept => **Anne309/pej** Min
代码
my ($line1,$line2,@arr1,@arr2,@arr3,@emptyarr);
@arr1 = <FILE1>;
@arr2 = <FILE2>;
foreach $line2 (@arr2) {
if ($line2 =~ m/(.*)\s+(.*)\s+(.*)\s+(.*)/) {
@arr3 = @emptyarr;
my $cname2 = "$2";
push (@arr3, $cname2);
}
}
foreach $line2 (@arr3) {
foreach $line1 (@arr1) {
if ($line1 =~ m/(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)\s+(.*)/) {
my $cname1 = "$2";
if ($cname1 ne $line3) {
print NL "$cname1\n";
}
}
}
}
预期结果:
ID alan135/xkr $work(b05bfn00un0c3)/b05bfn00un0c3 ; #<= b05bfn00un0d0 大小:5848.270996
ID sam012/pp $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 尺寸:INFINITY
ID Steve9018 $work(b05bfn00ld0p7)/b05bfn00ld0p7 ; #<= b05bfn00ld0s0 大小:无穷大