我有一个 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
。
如果$1
seq.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/'