将部分文件名插入到文件中的行首



我有一个目录,其中包括.fasta文件等。每个fasta文件具有以下格式:

OFAS000562-RA-EXON01_rbh.fasta_results.txt.fasta
OFAS000739-RA-EXON03_rbh.fasta_results.txt.fasta
OFAS001341-RA-EXON03_rbh.fasta_results.txt.fasta
OFAS001376-RA-EXON05_rbh.fasta_results.txt.fasta

在每个文件中,例如,OFAS000562-RA-EXON01_rbh.fasta_results.txt.fasta,是DNA序列及其关联的标头:

>Anasa_tristis_comp16713_c0_seq1
ATATTACGTAGATTGTTCTTTAATTGTCTATGAGTTTCGGAGACAAGGCTCTGAATTTTAGGGTGTTGATCACCGAATGTTAGGATGAGTATTGTTGTGGCGACAATAAATATGAAACCTACAAGGTAACTTTTTGCCCTCATTGAGAAGACACAGCCGCATTTGAGCCTTTTTTCCTTGCACGCTGAGTTTTCCTTAAGA
>Anoplocnemis_curvipes_gi_512414836_gb_GAJV01001484.1
ATATTACGTAGATTGTTCTTTAATTGTCTATGAGTTTCGGAGACAAGGCTCTGAATTCTAGGGTGTTGATCACCGAATGTTAGGATGAGTATTGTTGTAGCGACAATAAATGTGAAACCTACAAGGTAACTTTTTGCCCTCATTGAGAAGACACAGCCGCATTTGAGCCTTTTTCCTTGCACGCTGAGTTTTTCGTAAGA

我想做的是遍历每个.fasta文件,提取文件名的一部分(格式:OFAS##-RA-EXON##),然后将提取的部分插入到每个标题的开头>符号之后。为了遵循OFAS000562-RA-EXON01_rbh.fasta_results.txt.fasta示例,我希望文件中的内容如下所示:

>OFAS000562-RA-EXON01_Anasa_tristis_comp16713_c0_seq1
ATATTACGTAGATTGTTCTTTAATTGTCTATGAGTTTCGGAGACAAGGCTCTGAATTTTAGGGTGTTGATCACCGAATGTTAGGATGAGTATTGTTGTGGCGACAATAAATATGAAACCTACAAGGTAACTTTTTGCCCTCATTGAGAAGACACAGCCGCATTTGAGCCTTTTTTCCTTGCACGCTGAGTTTTCCTTAAGA
>OFAS000562-RA-EXON01_Anoplocnemis_curvipes_gi_512414836_gb_GAJV01001484.1
ATATTACGTAGATTGTTCTTTAATTGTCTATGAGTTTCGGAGACAAGGCTCTGAATTCTAGGGTGTTGATCACCGAATGTTAGGATGAGTATTGTTGTAGCGACAATAAATGTGAAACCTACAAGGTAACTTTTTGCCCTCATTGAGAAGACACAGCCGCATTTGAGCCTTTTTCCTTGCACGCTGAGTTTTTCGTAAGA

我在网上看到过一些选项,但这些选项采用整个文件名并插入每行的开头。我对 sed 更熟悉一点,而且我有一个 bash 脚本作为起点,我认为它让我接近我想要的东西。我可能离得很远,或者可能有更简单的方法。我只是不知道如何修改我当前必须提取和/或使用文件名的该部分的内容。

#!/bin/bash
for f in OFAS* 
do 
    sed -i "s/>/>$f_/" "$f" 
done

只需从文件名中提取所需的部分,例如:

#!/bin/bash
for f in OFAS* 
do 
    part=$(echo "$f" | sed 's/_rbh.*fasta$//')
    sed -i '.old' "s/^>/>${part}_/" "$f" 
done

在上面,我只是从每个文件名中删除_rbh.fasta_results.txt.fasta部分。

#!/bin/bash
for f in OFAS* 
do 
    sed -i "s/>/>${f%%_*}_/" "$f" 
done

${f%%*} 将从 f 中删除最长的模式 "*",例如:

f=OFAS000562-RA-EXON01_rbh.fasta_results.txt.fasta
echo ${f%%_*}

给:

OFAS000562-RA-EXON01

最新更新