我想用生物体名称(存储在文件中)和标识符(文件名的一部分)重命名FASTA文件。
所有文件的文件名和存储数据的格式相同,每个文件只有一个FASTA标头和相应的顺序。
原始文件名:
$ head GCF_000008205.1_ASM820v1_genomic.fna
>NC_007295.1 Mycoplasma hyopneumoniae J, complete genome
CCAAAATCAACTTTATTAAATGTGCTAAATAAAGTTGATAAAATGTTTGCAAAAACATTTTTGTTGTTTTAAACAAAACA
AATTGATTTAAAAATTATACTACAAAATTAAAGGAAAATTTATAAAATGCAAACAAATAAAAATAATTTAAAGGTTAGAA
CACAGCAAATTAGACAACAAATTGAAAATTTATTAAATGATCGAATGTTGTATAACAACTTTTTTAGCACAATTTATGTA
...
我只想使用文件名中的程序集标识符(GCF_000008205.1)以及FASTA标头(猪肺炎支原体)的第二个和第三个单词来重命名文件名:
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
但是结果显示的是生物名称之前的代码,而不是原始文件名中我感兴趣的标识符。
谢谢!
答案 0 :(得分: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
我建议先尝试创建一个备份文件夹,以防万一某些文件的格式不同。