用第一行的一部分重命名 FASTA 文件
Rename FASTA files with part of their first line
我想用第一行的一些信息重命名一些基因组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 文件第一行的信息重命名一千个 *.fna
文件,给出:
Buchnera_aphidicola_AE013218.1.fna
Borrelia_hermsii_CP000048.1.fna
FASTA header保持不变。只是文件名。
您可以遍历所有 .fna
文件,提取单词,用 awk 重新排列它们并将它们放入 mv
命令中,如下所示:
for fname in *.fna; do
mv -- "$fname" \
"$(awk 'NR==1{printf("%s_%s_%s\n",,,substr(,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_%s\n", , , substr(, 2))
exit
}
printf
的格式化字符串重新排列了前三个单词; substr
从第一个单词中删除前导 >
。 exit
阻止处理文件的其余部分;它不会改变结果,但会减慢速度。
1 更便携 mv "./$fname" "./$( ... )"
;据我所知,--
是 GNUism。
我想用第一行的一些信息重命名一些基因组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 文件第一行的信息重命名一千个 *.fna
文件,给出:
Buchnera_aphidicola_AE013218.1.fna
Borrelia_hermsii_CP000048.1.fna
FASTA header保持不变。只是文件名。
您可以遍历所有 .fna
文件,提取单词,用 awk 重新排列它们并将它们放入 mv
命令中,如下所示:
for fname in *.fna; do
mv -- "$fname" \
"$(awk 'NR==1{printf("%s_%s_%s\n",,,substr(,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_%s\n", , , substr(, 2))
exit
}
printf
的格式化字符串重新排列了前三个单词; substr
从第一个单词中删除前导 >
。 exit
阻止处理文件的其余部分;它不会改变结果,但会减慢速度。
1 更便携 mv "./$fname" "./$( ... )"
;据我所知,--
是 GNUism。