我有一个看起来像这样的文件
>Unc14086
AGAGUUUGAU
>Unc35443
GCACGAGAAA
因此,每一个n(n可能变化)行,下一行以">"开头,这是新信息块的开头。
我有另一个制表符分隔的文件:
Unc14806 InformationalTextExample
Unc35433 InformationalTextExampleII
我的目标是使用以">"开头的行中的信息解析第二个文件。在第一个文件中。每当匹配对出现时,我想写" InformationalTextExample"在该行中,可能由" _":
分隔>Unc14086_InformationalTextExample
AGAGUUUGAU
>Unc35443_InformationalTextExampleII
GCACGAGAAA
怎么可能?
谢谢!
答案 0 :(得分:1)
我会使用Perl来完成任务。我假设文件名为1.fasta
和1.tsv
:
#!/usr/bin/perl
use warnings;
use strict;
my %name_of_id;
open my $TSV, '<', '1.tsv' or die $!;
while (<$TSV>) {
my ($id, $name) = split /\t/;
$name_of_id{$id} = $name;
}
close $TSV;
open my $FASTA, '<', '1.fasta' or die $!;
while (<$FASTA>) {
if (my ($id) = /^>(\S*)/) {
if (exists $name_of_id{$id}) {
chomp;
print $id, '_', $name_of_id{$id};
} else {
warn "WARNING: $id not found!\n";
print;
}
} else {
print;
}
}
答案 1 :(得分:1)
提供输入/输出示例以帮助人们理解您的问题和问题是很好的。但请尽量避免拼错!
看看你的例子:
>Unc14086 then Unc14806 Inf...
^ ^
>Unc35443 then Unf35433 Inf...
^ ^
无论如何,这个单行将帮助你:
awk 'NR==FNR{a[$1]=$1"_"$2;next}sub(/^>/,"",$1){$0=">"a[$1]}7' FS="\t" f2 f1
f2
是没有>
固定拼写错误的例子:
kent$ head f2 f
==> f2 <==
Unc14086 InformationalTextExample
Unc35443 InformationalTextExampleII
==> f <==
>Unc14086
AGAGUUUGAU
>Unc35443
GCACGAGAAA
kent$ awk 'NR==FNR{a[$1]=$1"_"$2;next}sub(/^>/,"",$1){$0=">"a[$1]}7' FS="\t" f2 f
>Unc14086_InformationalTextExample
AGAGUUUGAU
>Unc35443_InformationalTextExampleII
GCACGAGAAA