如何将名称列表文件中的字符串添加到另一个文件?

如何将名称列表文件中的字符串添加到另一个文件?

我有一个 fasta 文件(seq.fa),它是遗传信息的标准文件格式,如下所示:

>TR1|c0_g1_i1
GTCGAGCATGGTCTTGGTCATCTTCCTTTCAAAGAA
>TR6|c0_g1_i1
GTGGAATATCGCCAGTGACCATCACTGATTAACCTG

我还有一个名称与标题匹配的文件(“>TR...”名称):

TR1|c0_g1_i1    scaf0432344_50037.734_wgs
TR6|c0_g1_i1    scaf0159424_10142.072_wgs

我需要将“scaf0...”标识符作为 seq.fa 中“>”文件之后的第一个标识符。

我想保留每个序列唯一的“TR...”标识符,如下所示:

>scaf0432344_50037.734_wgs|TR1|c0_g1_i1
GTCGAGCATGGTCTTGGTCATCTTCCTTTCAAAGAA
>scaf0159424_10142.072_wgs|TR6|c0_g1_i1
GTGGAATATCGCCAGTGACCATCACTGATTAACCTG

名称文件的顺序与序列文件的顺序相同!

没有尝试过任何事情,因为我没有受过训练,也不知道我在做什么:/

答案1

awk

awk 'FNR==NR{
  a[">"$1]=$2;next
}
$1 in a{
  sub(/>/,">"a[$1]"|",$1)
}1' file2 seq.fa

a从 file2 获取 scaf 值并将其保存在索引为的数组中">"$1

如果$1seq.fa 是数组中的索引,a请替换后$1包含 scaf 值。a[$1]>

然后打印所有行seq.fa

答案2

作为变体

join <(paste - - <sqa.fa | cut -c2-) name -o 2.2,1.1,1.2 |
sed 's/^/>/;s/\s/|/;s/\s/\n/'

相关内容