首页 文章

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

提问于
浏览
1

我想使用第一行的一些信息重命名一些基因组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 Headers 保持不变 . 只是文件名 .

1 回答

  • 1

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

    for fname in *.fna; do
        mv -- "$fname" \
        "$(awk 'NR==1{printf("%s_%s_%s\n",$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_%s\n", $2, $3, substr($1, 2))
        exit
    }
    

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


    1更便携将是 mv "./$fname" "./$( ... )" ;据我所知, -- 是一个GNU主义 .

相关问题