保存多个文件bash的输出

时间:2015-09-24 13:02:30

标签: bash

我有一系列目录,在下面的代码中由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

1 个答案:

答案 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变量已正确设置。每个输出文件将被关闭,下一个输出文件将在每次循环迭代期间打开。