次のファイルがあります。
FC_014_6361.bam
FC_014_6462.bam
FC_014_6183.bam
現在の各ファイルに対して個別に次のコマンドを実行します。たとえば、FC_014_6361.bam
コマンドは次のようになります。
$ bedtools intersect -abam FC_014_6361.bam -b CLIA-bed-for-DRAGEN_1.bed > FC_014_6361Inter.bam
$ samtools sort FC_014_6361Inter.bam > FC_014_6361InterSort.bam
$ samtools depth -a FC_014_6361InterSort.bam -b CLIA-bed-for-DRAGEN_1.bed > FC_014_6361InterSortDepth.txt
$ awk '$3<20' FC_014_6361InterSortDepth.txt > 6361_20.txt
このタイプの多くのファイルに対してこれを行うのは非常に退屈です。誰かがこれを自動化して説明するスクリプトを書くのに役立ちますか?
ベストアンサー1
各ソースファイル名を少し変更して、元のファイル名を付けたファイルに結果を保存できます。この情報を使用してループを構築できます。
次の内容をファイルに入れます。doit
#!/bin/bash
#
for bamsrc in "$@" # For each item on the command line
do
prefix="${bamsrc%.bam}" # Strip off trailing .bam
result="${prefix##*_}" # Strip off leading *_
echo "Processing '$bamsrc' into intermediate bam files and ${result}_20.txt"
# Perform the processing
bedtools intersect -abam "$bamsrc" -b CLIA-bed-for-DRAGEN_1.bed > "${prefix}Inter.bam"
samtools sort "${prefix}Inter.bam" >"${prefix}InterSort.bam"
samtools depth -a "${prefix}InterSort.bam" -b CLIA-bed-for-DRAGEN_1.bed > "${prefix}InterSortDepth.txt"
awk '$3<20' "${prefix}InterSortDepth.txt" > "${result}_20.txt"
done
スクリプトファイルを実行可能にします。
chmod a+x doit
次に、ソースファイル名をスペースで区切られたリストとして使用します。
./doit FC_014_6361.bam FC_014_6462.bam FC_014_6183.bam