Perl:匹配两个文件中的数据
Posted
技术标签:
【中文标题】Perl:匹配两个文件中的数据【英文标题】:Perl: matching data in two files 【发布时间】:2015-08-16 11:51:06 【问题描述】:我想匹配并打印两个文件(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
这是我的脚本,我已尝试按照此提交:In Perl, mapping between a reference file and a series of files
#!/usr/bin/perl
use strict;
use warnings;
my %data;
open (SHIFTS,"file1.txt") or die;
open (PDB, "file2.txt") or die;
while (my $line = <PDB>)
chomp $line;
my @fields = split(/\t/,$line);
$data$fields[4] = $fields[2];
close PDB;
while (my $line = <SHIFTS>)
chomp($line);
my @columns = split(/\t/,$line);
my $value = ($columns[1] =~ m/^.*?([A-Za-z])/ );
print "$columns[0]\t$fields[3]\t$value\t$data$value\n";
close SHIFTS;
exit;
【问题讨论】:
有什么问题? 是的,您真正想问什么?请说明您面临的问题(至少)以及您尝试过的方法。 另外,您没有在任何地方匹配两个文件之间的列。你也应该调查一下。 @choroba,感谢您的 cmets,我已尝试上述脚本并收到错误“在连接或字符串中使用未初始化的值”,我认为这是因为我没有匹配适当的值.我想知道是否有人可以为我指明正确的方向,以及如何实现这一目标。 【参考方案1】:这是使用 split() 黑客的一种方法:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $f1 = 'file1.txt';
my $f2 = 'file2.txt';
my @pdb;
open my $pdb_file, '<', $f2
or die "Can't open the PDB file $f2: $!";
while (my $line = <$pdb_file>)
chomp $line;
push @pdb, $line;
close $pdb_file;
open my $shifts_file, '<', $f1
or die "Can't open the SHIFTS file $f1: $!";
while (my $line = <$shifts_file>)
chomp $line;
my $pdb_line = shift @pdb;
# - inner split: get the third element from the $pdb_line
# - outer split: get the first element (character) from the
# result of the inner split
my $criteria = (split('', (split('\s+', $pdb_line))[2]))[0];
# - compare the 2nd element of the file1.txt line against
# the above split() operations
if ((split('\s+', $line))[1] eq $criteria)
print "$pdb_line\n";
else
print "**** >$pdb_line< doesn't match >$line<\n";
文件:
file1.txt(注意我更改了第二行以确保不匹配有效):
1 H 35
1 A 22
1 H 20
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
【讨论】:
感谢您的脚本,我可以看到如何使用 if 语句来匹配两个文件中的值。以上是关于Perl:匹配两个文件中的数据的主要内容,如果未能解决你的问题,请参考以下文章