我正在使用perl脚本来查找两个制表符分隔文件中的列之间的匹配。但是对于一列,我只想查找两列中两个字符串之间的部分匹配。perl匹配两个文件中的字符串的一部分
它涉及$ table2的$ row [4]和$ table1的$ row {d}。 $ table2的$ row [4]中的值如下所示: 'xxxx'。 $ table1的$ row {d}中的值如下所示: 'xxxx.aaa'。
如果'。'之前的部分是一样的,有一场比赛。如果没有,则不匹配。我不知道如何在我的脚本中实现这一点。这是我迄今为止所拥有的。我只查找不同列之间的完整匹配。 “...”表示的代码,是不是这个问题
#! /usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
local $Data::Dumper::Useqq = 1;
use Getopt::Long qw(GetOptions);
...
...
chomp(my @header_table2 = split /\t/, <$table2>);
my %lookup;
while(<$table2>){
chomp;
my @row = split(/\t/);
$lookup{ $row[0] }{ $row[1] }{ $row[4] }{ $row[5] }{ $row[6] }{ $row[7] }{ $row[8] } = [ $row[9], $row[10] ];
}
my @header = do {
my $header = <$table1>;
$header =~ s/\t?\n\z//;
split /\t/, $header;
};
print $table3 join ("\t", @header, qw/ name1 name2 /), "\n";
{
no warnings 'uninitialized';
while(<$table1>){
s/\t?\n\z//;
my %row;
@row{@header} = split /\t/;
print $table3 join ("\t", @row{@header},
@{ $lookup{ $row{a} }{ $row{b} }{ $row{c} }{ $row{d} }{ $row{e} }{ $row{f} }{ $row{g} }
// [ "", "" ] }), "\n";
}
}
我明白你想要做什么,但我的$表1包含约50列,所以@ {$查找{$行{A} } {$ row {b}} {$ row {c}} {$ row {d}} {$ row {e}} {$ row {f}} {$ row {g}}实际上是指列(在第一行)。所以我不认为你的解决方案在这种情况下会起作用。 – user1987607
@ user1987607:我看不出有任何理由怀疑你。你有没有试过我的代码?除非你展示真实的数据,否则我无法进一步提供帮助。 – Borodin
我之所以质疑table1是否包含9列,是因为表2包含50列(不仅仅是'a'到'g'),所以我将table1的9列与表2的列匹配, a','b','c','d','e',...,但不仅仅是该表格的前9列。 – user1987607