Bash 查找&;替换多个FASTA文件中的多个序列头

Bash 查找&;替换多个FASTA文件中的多个序列头,bash,macos,sed,replace,find,Bash,Macos,Sed,Replace,Find,这是我的问题(使用Mac OS X): 我有大约35个FASTA文件,每个文件中有30个序列。每个FASTA文件代表一个基因,它们都包含在每个文件中具有相同序列头的相同个体。标题格式为“############G#种”,数字是非顺序的。我需要遍历每个文件并更改4个特定的标题,同时将输出保持为35个离散文件,与相应的输入文件同名,最好将输出保存到单独的子目录中 例如:每个文件都包含一个“6934_Sergia_sp”,我需要更改 所有35个文件中该名称的每个实例都是“6934_R_robusta”

这是我的问题(使用Mac OS X):

  • 我有大约35个FASTA文件,每个文件中有30个序列。每个FASTA文件代表一个基因,它们都包含在每个文件中具有相同序列头的相同个体。标题格式为“############G#种”,数字是非顺序的。我需要遍历每个文件并更改4个特定的标题,同时将输出保持为35个离散文件,与相应的输入文件同名,最好将输出保存到单独的子目录中

    例如:每个文件都包含一个“6934_Sergia_sp”,我需要更改 所有35个文件中该名称的每个实例都是“6934_R_robusta”。我需要对“8324_Sergestes_sp”执行相同的操作,将每个文件中的每个实例都更改为“8324_P_vigilax”。冲洗并用不同的标题重复2次。更改标题后,我需要有35个离散的输出文件,其名称与相应的输入文件相同

  • 到目前为止,我发现最有希望的是以下链接:

    使用以下脚本:

      find /home/user/directory -name \*.c -exec sed -i "s/cybernetnews/cybernet/g" {} \;
    
    更改信息以满足我的需要,我得到如下脚本:

    find Path/to/my/directory -name \*.fas -exec sed -i 's/6934_Sergia_sp/6934_R_robusta/g' {} \;
    
    像这样运行脚本,我得到了“undefined label”错误。经过研究,,

    我发现我应该在-I giving之后添加“.fas”:

    find Path/to/my/directory -name \*.fas -exec sed -i '.fas' 's/6934_Sergia_sp/6934_R_robusta/g' {} \;
    
    因为在Mac上,您需要为输出文件指定扩展名。像这样运行脚本,我得到了非常接近我想要的结果,每个输入文件都被复制,每个文件中正确的头被正确地替换为新名称,输出被放在同一个目录中。但是,一次只替换一个头,输出文件的扩展名为.fas.fas

  • 接下来,我将不得不重命名输出文件以删除扩展名中的第二个“.fas”,并重写和重新运行脚本3次,以使所有内容都按我所希望的方式更改,这虽然不是世界末日,但肯定不是理想的


    是否可以设置一个脚本,以便我可以同时运行所有4个替换,同时将输出导出到新的子目录

    你的方法很好,但我更喜欢更详细的方法,这样我就不必太多地使用引号了。比如:

    for fasta in $(find Path/to/my/directory -name "*.fas")
    do
        new_fasta=$(basename $fasta .fas).new.fas
        sed 's/6934_Sergia_sp/6934_R_robusta/g; s/Another_substitution/Another_result/' $fasta > $new_fasta
    done
    
    在这里,您输入要循环的FastA文件列表,计算一个新的FastA名称(和位置,如果需要),最后在输入上运行
    sed
    ,并将输出保留在一个新文件中。注意,您可以在
    sed
    中提供多个替换,用分号分隔


    顺便说一句,正如@Ed Morton所说,对于下一个问题,请包括问题的简明描述、样本输入和预期输出。

    您的问题包括简明的、可测试的样本输入和预期输出。Mac
    sed
    将接受
    sed-i''s/../../'文件(即两个单引号),若要指示没有备份文件,只需覆盖现有文件。祝你好运。谢谢你的建议。我试过了,但是我收到了一条错误消息:“sed:1:“s/6934_Sergia_sp/6934_R…”:命令代码无效。它创建了新的fasta文件,但它们是空的。我试着加入我的脚本,但我能想出如何格式化我的帖子,使它不是一个巨大的文本块。话虽如此,你能想一个我得到这个信息的原因吗?谢谢你的主意。用于替换的
    sed
    命令的格式为
    s/original/substituded/
    ,您可以用分号分隔一组命令。你写的正是我的命令吗?你能给我完整的错误信息吗?你应该把你的代码放在原始问题中,这样每个人都可以看到它并帮助你。