0

如果有人可以帮助我编写一个循环来遍历文件夹中的文件,那将为我节省大量时间。我认为这一定是一个非常简单的解决方案,但我目前不知道如何在循环中嵌套循环。到目前为止,我有这个脚本:

cd /folderlocation/
for i in `</textfile_containing_lines_to_iterate_through`
do
 #size=`echo $i | perl -nE '/:([\d-]+)/ && say abs(eval $1)'`
  #echo "$size"
 zcat dataset | head -n 18 > temp"$i".vcf
 tabix dataset $i >> temp"$i".vcf 
 vcftools --window-pi 1000000 --vcf temp10individuals"$i".vcf >>  run_summary.txt
cat out.windowed.pi >> outputfile_2 
  #rm temp*
done
grep -v "PI" outputfile_2   > outputfile
rm outputfile_2

我需要扩展它,以便脚本通过所有'textfiles_ contains_lines_to_iterate_through'多次运行。目前我每次手动更改文本文件的名称并重新运行脚本。所以我需要一个循环来为文件夹中的文件执行此操作,并且还使用文件名作为输出文件名的一部分,以便我可以将输出文件与输入文件匹配。

任何帮助都会非常有用,非常感谢!

提前谢谢了。

4

2 回答 2

1

要遍历文件夹中的文件,

for i in folder/*;
do <whateveryouwanttodo>;
done;

希望这可以帮助。:)

于 2012-06-30T15:13:23.987 回答
1

您可以像任何其他语言一样嵌套循环。你只需在另一个里面写一个。

我们先来看看如何遍历当前目录下的所有文件:

for file in *
do
    do_something_with $file
    or_generate ${file}_changed
done

现在你的整个脚本变成了:

cd /folderlocation/
for f in *
do
  for i in `<$f`
  do
    #size=`echo $i | perl -nE '/:([\d-]+)/ && say abs(eval $1)'`
    #echo "$size"
    zcat dataset | head -n 18 > temp${i}.vcf
    tabix dataset $i >> temp${i}.vcf 
    vcftools --window-pi 1000000 --vcf temp10individuals${i}.vcf >>  run_summary.txt
    cat out.windowed.pi >> outputfile_2 
    #rm temp*
  done
  grep -v "PI" outputfile_2   > output_${file}
  rm outputfile_2
done
于 2012-06-30T15:17:09.047 回答