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_taining_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 に答える