我在子目录中有很多文件,例如。 UCE-1 ... UCE-2000,它们都包含相同的两种文件类型(.cfg
文件和.phylip
文件。)
UCEs
UCE-13
partition_finder.cfg
UCE-13.phylip
我需要修改所有这些UCE-1 ... UCE-2000文件夹中的.cfg文件。具体来说,我需要复制.phylip
文件UCE-13.phylip
的文件名,并将其放在.cfg
文件内的特定文本部分,例如更改
alignment = ;
到
alignment = UCE-13.phylip;
我需要做的第二个修改是复制始终在第一行末尾的.phylip文件中找到的文本部分,并在.cfg
文件的特定位置替换它。
复制空格和返回之间.phylip
文件第一行的最后一组数字
2 466\r
然后在.cfg
中找到替换它 All = 1-;
到
All = 1-466;
数字非常长。
非常感谢任何这些问题的帮助。
答案 0 :(得分:0)
从“All-UCEs"”开始
这个信息对于一个子目录来说都是常见的
先去那个目录
获得phylip名称
获取phylip文件第一行的最后一个字段
将它们粘贴在.cfg文件中
(使用双引号允许在sed中扩展shell var)
改回dir
for dir in UCE-*; do
cd ${dir}
phylip="*.phylip"
some_num=`awk 'NR==1{print $NF}' ${phylip}`
sed -i "s/alignment = ;/alignment = ${phylip};/;\
s/All = 1-;/All = 1-${some_num};" *.cfg
cd ..
done
(未测试的)