0%

Perl 根据相同字段并合并两个文本

有两个文本:

a.txt的内容:

0001|abc|1000.00
0002|ddd|1200.20
0003|dde|100.01
0005|ggg|200
……
……

b.txt的内容:

1234|2600|1|AAAAA|abc|88888888|
1234|2600|2|BBBBB|ddd|8888888|
1234|2600|3|CCCCC|dde|8888|
1234|2600|4|DDDDD|eee|88888888888|
1234|2600|5|AAAAA|ggg|888888|
……
……

我想把a.txt的第一个字段删去前面的0后与b.txt的第3个字段比较,如果相等,就把b.txt中的第4个字段放在a.txt的前面.

生成结果如下:

AAAAA|0001|abc|1000.00
BBBBB|0002|ddd|1200.20
CCCCC|0003|dde|100.01
AAAAA|0005|ggg|200
……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

$filea="a.txt";
$fileb="b.txt";

open(FB,"<$fileb") || die "Can't read $fileb\n$!\n";
while() {
@line=split(/\|/);
$datab{$line[2]}=$line[3];
}
close FB;
open (FA,"<$filea") || die "Can't read $filea\n$!\n";
while()
{
@line = split(/\|/);
$dataa{$line[0]} = $_;
}

foreach $key (sort {$b cmp $a} keys %dataa)
{
print $datab{int $key}.'|'.$dataa{$key} if exists $datab{int $key};
}