这是我的问题(使用Mac OS X):
我有大约35个FASTA文件,每个文件有30个序列 . 每个FASTA文件代表一个基因,它们都包含相同的个体,每个文件中具有相同的序列 Headers . Headers 格式为“#### _ G_species”,数字为非顺序 . 我需要遍历每个文件并更改4个特定标头,同时还将输出保持为35个离散文件,其名称与相应的输入文件相同,最好将输出存放到单独的子目录中 .
例如:每个文件都包含一个“6934_Sergia_sp”,我需要将所有35个文件中该名称的每个实例更改为“6934_R_robusta” . 我需要对“8324_Sergestes_sp”执行相同的操作,将每个文件中的每个实例更改为“8324_P_vigilax” . 用不同的接头冲洗并重复2次 . 更改 Headers 后,我需要有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' {} \;
我发现在-i给出之后我应该添加'.fas':
find Path/to/my/directory -name \*.fas -exec sed -i '.fas' 's/6934_Sergia_sp/6934_R_robusta/g' {} \;
因为在Mac上你需要为输出文件指定一个扩展名 . 运行这样的脚本,我得到的几乎是我正在寻找的每个输入文件被复制,每个正确的 Headers 正确替换新名称,输出放在同一目录中 . 但是,这一次只能替换一个标头,输出文件的扩展名为.fas.fas .
继续前进,我将不得不重命名输出文件以删除扩展中的第二个“.fas”,并重写并重新运行脚本3次,以便按照我想要的方式更改所有内容,这不会是结束世界,但绝对不会是理想的 .
是否可以设置脚本以便我可以同时运行所有4个替换,同时还将输出导出到新的子目录?