如果有人可以帮我写一个循环来迭代文件夹中的文件,那将节省我大量的时间。我认为它必须是一个非常简单的解决方案,但我目前不知道如何在循环中嵌套循环。到目前为止,我有这个脚本:
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_containing_lines_to_iterate_through'运行多次。目前我每次都手动更改文本文件的名称并重新运行脚本。所以我需要一个为文件夹中的文件执行此操作的循环,并且还使用文件名作为输出文件名的一部分,以便我可以将输出文件与输入文件匹配。
任何帮助都非常有用,非常感谢!
非常感谢提前。
答案 0 :(得分:1)
迭代文件夹中的文件
for i in folder/*;
do <whateveryouwanttodo>;
done;
希望这会有所帮助。 :)
答案 1 :(得分: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