我有一系列目录,在下面的代码中由species
表示。我想对每个目录中的文件运行一系列命令,然后将输出保存为相应目录中的一个文件。使用以下代码,我只保存最后一个目录的输出。我想知道如何解决这个问题?谢谢!
for dir in ${Addr1}/*/*_files/seq*
do
species=`echo $dir | cut -f8 -d"/"`
chr=`echo $dir | cut -f10 -d"/"`
echo -n -e "${chr} \t"; ./script.py ${Addr1}/${species}/${species}_files/$chr
done > ${Addr1}/${species}/${species}_estimated
答案 0 :(得分:3)
你有一个逻辑问题:
for dir in ${Addr1}/*/*_files/seq*
do
species=`echo $dir | cut -f8 -d"/"`
# ...
done > ${Addr1}/${species}/${species}_estimated
问题在于,您只在循环内为species
分配值,但在循环开始时必须打开末尾指定的输出文件。
相反,试试这个:
for dir in ${Addr1}/*/*_files/seq*
do
species=`echo $dir | cut -f8 -d"/"`
chr=`echo $dir | cut -f10 -d"/"`
{
echo -n -e "${chr} \t";
./script.py ${Addr1}/${species}/${species}_files/$chr;
} >> ${Addr1}/${species}/${species}_estimated
done
现在打开输出文件时,species
变量已正确设置。每个输出文件将被关闭,下一个输出文件将在每次循环迭代期间打开。