我正在使用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