「forループ」を使用して、ディレクトリ内のすべてのファイルに対してスクリプトを実行します。

「forループ」を使用して、ディレクトリ内のすべてのファイルに対してスクリプトを実行します。

ファイルディレクトリを介して実行したいスクリプトがあります。

awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < TNGA_C_0hr_Joined_Asz1.fastqsanger | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p'  | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > TNGA_C_0hr_Asz1_Collapsed.fasta

このスクリプトをテストしたところ、私の要件にはうまくいきました。

私がしたいのは、ディレクトリ内のすべてのファイルに適用されるforループを作成することです。私は成功せずに次のことを試しました。また、変形を試みました。

for filename in /Test/*.fastqsanger; do
    awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < filename.fastqsanger | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p'  | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > filename.fasta
done

私はプログラミングにはあまり慣れていないので、助けてくれてありがとう。

ベストアンサー1

filenameあなたのスクリプトはループに変数を使用しません。filename.fastqsanger変数を引用しないということは、完全なファイル名がすでに存在するがまだ存在しないことを意味します。

修正されたバージョンは次のとおりです。

for filename in /Test/*.fastqsanger; do
    awk '{if(NR%4==1) {printf(">%s\n",substr($0,2));} else if(NR%4==2) print;}' < $filename | awk 'NR%2==0' | sed 's/TGAGATGTGA/*/p'  | cut -d '*' -f 2 -s | sort -k 1.180,1.194 -u | cat -n | sed 's/^/>/' | tr "[\t]" "\n" > $filename.fasta
done

おすすめ記事