用第一行的一部分重命名FASTA文件



我想用第一行的一些信息重命名一些基因组FASTA文件,但是我想不出来。

下面是一个例子,两个文件:

GCA_000007365.1_ASM736v1_genomic.fna:

>AE013218.1 Buchnera aphidicola str. Sg (Schizaphis graminum), complete genome
ATGTCAAAGTCGTATTTAAAAAATTTTGATGTTATTGTTATTGGTGGAGGGCATGCTGGCACTGAAGCTGCAGCAGCCTC
TGCAAGAGTAGGTTGTAAAACATTATTATTAACTCAAAAAATAACTGATATAGGTGTATTATCTTGCAATCCTGCTATCG

GCA_000012065.2_ASM1206v2_genomic.fna:

>CP000048.1 Borrelia hermsii DAH, complete genome
TACCACTACACTTATTAATAATACATACTCACGCCTGGGGGGAAAAATTCAATAATGGAAACCTTACAAATATAAAACCA
CTACAAATAGGTATTATTCAGCATAATTATATAAATTTAACTCCTTATAATCAACATTATAAATATTACGCTTTCATTGG

我想用FASTA文件中第一行的信息重命名1000个*.fna文件,给出:

Buchnera_aphidicola_AE013218.1.fna
Borrelia_hermsii_CP000048.1.fna

FASTA报头保持不变。只是文件名。

您可以遍历所有.fna文件,提取单词,用awk重新排列它们并将它们放入mv命令中,如:

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

mv命令之前添加echo以查看其输出结果

mv -- GCA_000007365.1_ASM736v1_genomic.fna Buchnera_aphidicola_AE013218.1.fna
mv -- GCA_000012065.2_ASM1206v2_genomic.fna Borrelia_hermsii_CP000048.1.fna

--是为了确保以连字符开头的文件名不会被解释为mv的选项1

下面是awk命令在命令替换中的作用,更清晰:

NR == 1 {
    printf("%s_%s_%sn", $2, $3, substr($1, 2))
    exit
}

printf的格式化字符串重新排列前三个单词;substr从第一个单词中删除前导>exit阻止文件的其余部分被处理;它不会改变结果,但会减慢速度。


1更可移植的是mv "./$fname" "./$( ... )";--是一个GNUism,据我所知

最新更新