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