![如何将名称列表文件中的字符串添加到另一个文件?](https://linux22.com/image/85522/%E5%A6%82%E4%BD%95%E5%B0%86%E5%90%8D%E7%A7%B0%E5%88%97%E8%A1%A8%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2%E6%B7%BB%E5%8A%A0%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我有一个 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/'