Perl:在两个文件中匹配数据

Perl:在两个文件中匹配数据,perl,match,Perl,Match,我想匹配并打印两个文件(File1.txt和File2.txt)中的数据。目前,我正在尝试将File1中第二列的第一个字母与File2.txt中第三列的第一个字母进行匹配 File1.txt 1 H 35 1 C 22 1 H 20 File2.txt A 1 HB2 MET 1 A 2 CA MET 1 A 3 HA MET 1 OUTPUT 1 MET HB2 35 1 MET CA 22 1 MET HA 20 这是我的脚本,我尝

我想匹配并打印两个文件(File1.txt和File2.txt)中的数据。目前,我正在尝试将File1中第二列的第一个字母与File2.txt中第三列的第一个字母进行匹配

File1.txt
1  H  35
1  C  22
1  H  20

File2.txt
A  1 HB2 MET  1 
A  2 CA  MET  1
A  3 HA  MET  1

OUTPUT
1  MET  HB2  35
1  MET  CA   22
1  MET  HA   20 
这是我的脚本,我尝试了以下提交内容:

#/usr/bin/perl
严格使用;
使用警告;
我的%数据;
打开(移位,“file1.txt”)或死亡;
打开(PDB,“file2.txt”)或死亡;
while(我的$line=){
chomp$行;
my@fields=拆分(/\t/,$line);
$data{$fields[4]}=$fields[2];
}
关闭PDB;
while(我的$line=){
chomp($line);
my@columns=split(/\t/,$line);
我的$value=($columns[1]=~m/^.*([A-Za-z])/);
}
打印“$columns[0]\t$fields[3]\t$value\t$data{$value}\n”;
密切轮班;
出口
这里有一种使用split()黑客的方法:

file2.txt:

A  1 HB2 MET  1 
A  2 CA  MET  1
A  3 HA  MET  1
输出:

./app.pl
A  1 HB2 MET  1 
****>A  2 CA  MET  1< doesn't match >1  A  22<
A  3 HA  MET  1
/app.pl
A 1 HB2遇到1
****>A 2 CA MET 1<与A 22不匹配>1<
A 3公顷,1公顷

问题是什么?是的,你到底想问什么?请解释您面临的问题(至少)和您尝试过的方法。此外,您没有在任何地方匹配两个文件之间的列。您也应该研究一下。@choroba,谢谢您的评论,我已经尝试了上面的脚本,并得到了错误“在串联或字符串中使用未初始化值”,我想这是因为我没有匹配合适的值。我想知道是否有人可以为我指出正确的方向,以及如何实现这一点。感谢您的脚本,我可以看到如何使用if语句来匹配两个文件中的值。
1  H  35
1  A  22
1  H  20
A  1 HB2 MET  1 
A  2 CA  MET  1
A  3 HA  MET  1
./app.pl
A  1 HB2 MET  1 
****>A  2 CA  MET  1< doesn't match >1  A  22<
A  3 HA  MET  1