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

时间:2017-10-17 13:20:17

标签: bash sed

我有一个包含.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

2 个答案:

答案 0 :(得分:1)

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

#!/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部分。

答案 1 :(得分:1)

#!/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