首页 文章

使用序列 Headers 的一部分重命名基因组FASTA文件

提问于
浏览
0

我想用生物体名称(存储在文件中)和标识符(文件名的一部分)重命名FASTA文件 .

所有文件在文件名和存储数据中具有相同的格式,每个文件只有一个FASTA头和相应的序列 .

原始文件名:

$ head GCF_000008205.1_ASM820v1_genomic.fna

>NC_007295.1 Mycoplasma hyopneumoniae J, complete genome
CCAAAATCAACTTTATTAAATGTGCTAAATAAAGTTGATAAAATGTTTGCAAAAACATTTTTGTTGTTTTAAACAAAACA
AATTGATTTAAAAATTATACTACAAAATTAAAGGAAAATTTATAAAATGCAAACAAATAAAAATAATTTAAAGGTTAGAA
CACAGCAAATTAGACAACAAATTGAAAATTTATTAAATGATCGAATGTTGTATAACAACTTTTTTAGCACAATTTATGTA
...

我想重命名文件名,使用文件名中的程序集标识符(GCF_000008205.1),以及FASTA Headers (Mycoplasma hyopneumoniae)的第二和第三个单词:

Mycoplasma_hyopneumoniae_GCF_000008205.1.fna

我试过这个:

for fname in *.fna; do
mv -- "$fname" \
"$(awk 'NR==1{printf("%s_%s_%s\n",$2,$3,substr($1,2));exit}' "$fname")".fna
done

结果:

Mycoplasma_hyopneumoniae_NC_007295.1.fna

但结果显示了有机体名称前面的代码,而不是我感兴趣的标识符,它是原始文件的名称 .

谢谢!

1 回答

  • 0

    以下思路有效,但前提是每个文件的格式都与示例中的格式相同 . 在包含所有文件的目录中,执行以下操作:

    for i in $(ls)
    do
      name1=$(cat "$i" | grep \> | awk -v OFS='_' '{print $2,$3,_}')
      name2=$(basename "$i" | cut -d_ -f 1,2 | sed 's/$/.fna/g')
      mv "$i" "${name1}${name2}"
    done
    

    我建议在尝试之前先创建一个备份文件夹,以防你有一些格式不同的文件 .

相关问题