首页 > 解决方案 > 如何从 bash 中的嵌入式 for 循环写入多个文本文件?

问题描述

我在下面有这个使用 perl 脚本的 bash 循环。预计会为每个我想保存为单独的文本文件的每个输出一些$i内容$f。我在下面的代码完成了这项工作,但不是保存为 individual $i,而是保存$f并将输出18 to 24放入一个文件中。可能我必须在这个循环中重新定位写入命令,还是有更好的方法来做到这一点?

for f in *.fastq; do 
echo "Processing: " $f
for i in $(seq 18 24); do
echo "Doing: " $i
perl /home/owner/perl/count.pl $f $i
done > >(tee /media/owner/${f}_${i}.txt) 2>&1
done

标签: linuxbashloopsunix

解决方案


循环上的重定向是每个循环,而不是每个迭代。

您可以改为{ command group; }在您想要的命令周围使用 a 并将其重定向:

for f in *.fastq;
do 
  echo "Processing: " $f
  for i in $(seq 18 24);
  do
    {
      echo "Doing: " $i
      perl /home/owner/perl/count.pl $f $i
    } > >(tee /media/owner/${f}_${i}.txt) 2>&1
  done
done

推荐阅读