排序命令无法按预期工作

时间:2012-06-30 15:04:26

标签: bash loops

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

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'运行多次。目前我每次都手动更改文本文件的名称并重新运行脚本。所以我需要一个为文件夹中的文件执行此操作的循环,并且还使用文件名作为输出文件名的一部分,以便我可以将输出文件与输入文件匹配。

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

非常感谢提前。

2 个答案:

答案 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