用部分序列重命名基因组 FASTA 文件 header
Rename genome FASTA files with part of sequence header
我想用生物体名称(存储在文件中)和标识符(文件名的一部分)重命名 FASTA 文件。
所有文件的文件名和存储数据格式相同,每个文件只有一个FASTAheader和对应的序列。
原始文件名:
$ head GCF_000008205.1_ASM820v1_genomic.fna
>NC_007295.1 Mycoplasma hyopneumoniae J, complete genome
CCAAAATCAACTTTATTAAATGTGCTAAATAAAGTTGATAAAATGTTTGCAAAAACATTTTTGTTGTTTTAAACAAAACA
AATTGATTTAAAAATTATACTACAAAATTAAAGGAAAATTTATAAAATGCAAACAAATAAAAATAATTTAAAGGTTAGAA
CACAGCAAATTAGACAACAAATTGAAAATTTATTAAATGATCGAATGTTGTATAACAACTTTTTTAGCACAATTTATGTA
...
我只想重命名文件名,使用文件名中的程序集标识符 (GCF_000008205.1),以及 FASTA header(猪肺炎支原体)的第二个和第三个词:
Mycoplasma_hyopneumoniae_GCF_000008205.1.fna
我试过这个:
for fname in *.fna; do
mv -- "$fname" \
"$(awk 'NR==1{printf("%s_%s_%s\n",,,substr(,2));exit}' "$fname")".fna
done
结果:
Mycoplasma_hyopneumoniae_NC_007295.1.fna
但是结果显示的是生物名称前面的代码,而不是我感兴趣的标识符,它在原始文件的名称中。
谢谢!
以下想法可行,但前提是每个文件的格式都与示例中的格式相同。
在包含所有文件的目录中执行以下操作:
for i in $(ls)
do
name1=$(cat "$i" | grep \> | awk -v OFS='_' '{print ,,_}')
name2=$(basename "$i" | cut -d_ -f 1,2 | sed 's/$/.fna/g')
mv "$i" "${name1}${name2}"
done
我建议在尝试之前先创建一个备份文件夹,以防万一您有一些格式不同的文件。
我想用生物体名称(存储在文件中)和标识符(文件名的一部分)重命名 FASTA 文件。
所有文件的文件名和存储数据格式相同,每个文件只有一个FASTAheader和对应的序列。
原始文件名:
$ head GCF_000008205.1_ASM820v1_genomic.fna
>NC_007295.1 Mycoplasma hyopneumoniae J, complete genome
CCAAAATCAACTTTATTAAATGTGCTAAATAAAGTTGATAAAATGTTTGCAAAAACATTTTTGTTGTTTTAAACAAAACA
AATTGATTTAAAAATTATACTACAAAATTAAAGGAAAATTTATAAAATGCAAACAAATAAAAATAATTTAAAGGTTAGAA
CACAGCAAATTAGACAACAAATTGAAAATTTATTAAATGATCGAATGTTGTATAACAACTTTTTTAGCACAATTTATGTA
...
我只想重命名文件名,使用文件名中的程序集标识符 (GCF_000008205.1),以及 FASTA header(猪肺炎支原体)的第二个和第三个词:
Mycoplasma_hyopneumoniae_GCF_000008205.1.fna
我试过这个:
for fname in *.fna; do
mv -- "$fname" \
"$(awk 'NR==1{printf("%s_%s_%s\n",,,substr(,2));exit}' "$fname")".fna
done
结果:
Mycoplasma_hyopneumoniae_NC_007295.1.fna
但是结果显示的是生物名称前面的代码,而不是我感兴趣的标识符,它在原始文件的名称中。
谢谢!
以下想法可行,但前提是每个文件的格式都与示例中的格式相同。 在包含所有文件的目录中执行以下操作:
for i in $(ls)
do
name1=$(cat "$i" | grep \> | awk -v OFS='_' '{print ,,_}')
name2=$(basename "$i" | cut -d_ -f 1,2 | sed 's/$/.fna/g')
mv "$i" "${name1}${name2}"
done
我建议在尝试之前先创建一个备份文件夹,以防万一您有一些格式不同的文件。