我有一个制表符分隔的文本文件,如下所示:
contig11 GO:100 other columns of data
contig11 GO:289 other columns of data
contig11 GO:113 other columns of data
contig22 GO:388 other columns of data
contig22 GO:101 other columns of data
还有一个是这样的:
contig11 3 N
contig11 1 Y
contig22 1 Y
contig22 2 N
我需要将它们组合起来,以便一个文件的每个“多个”条目被复制并在另一个文件中填充其数据,这样我得到:
contig11 3 N GO:100 other columns of data
contig11 3 N GO:289 other columns of data
contig11 3 N GO:113 other columns of data
contig11 1 Y GO:100 other columns of data
contig11 1 Y GO:289 other columns of data
contig11 1 Y GO:113 other columns of data
contig22 1 Y GO:388 other columns of data
contig22 1 Y GO:101 other columns of data
contig22 2 N GO:388 other columns of data
contig22 2 N GO:101 other columns of data
我几乎没有编写脚本的经验,但是在其中一个文件中只出现了一次“contig11”,并带有散列/键。但我什至无法开始做这件事!非常感谢有关如何解决此问题的一些帮助或提示。
编辑所以我尝试了 ikegami 的建议(见答案):但是,这产生了我需要的输出,除了 GO:100 列以后(脚本中的 $rest ???) - 任何想法我做错了什么?
#!/usr/bin/env/perl
use warnings;
open (GOTERMS, "$ARGV[0]") or die "Error opening the input file with GO terms";
open (SNPS, "$ARGV[1]") or die "Error opening the input file with SNPs";
my %goterm;
while (<GOTERMS>)
{
my($id, $rest) = /^(\S++)(,*)/s;
push @{$goterm{$id}}, $rest;
}
while (my $row2 = <SNPS>)
{
chomp($row2);
my ($id) = $row2 =~ /^(\S+)/;
for my $rest (@{ $goterm{$id} })
{
print("$row2$rest\n");
}
}
close GOTERMS;
close SNPS;