bam
複数の(バイナリファイル形式)ファイルから特定の行を抽出したいと思います。以下を使用して単一のファイルから行を選択できますbam
。
samtools view -c TCGA-BH-A0BW-11A.sorted.bam "5:13744354-13744380"
550
次の100個のファイルを含むディレクトリがありますbam
。
TCGA-AC-A2FB-11A.sorted.bam
TCGA-AC-A2FF-11A.sorted.bam
TCGA-AC-A2FM-11B.sorted.bam
TCGA-AC-A2QH-01A.sorted.bam
TCGA-AC-A2QJ-01A.sorted.bam
TCGA-BH-A0BW-11A.sorted.bam
TCGA-BH-A0BW-01A.sorted.bam
TCGA-CH-A0BW-11A.sorted.bam
そのコマンドを複数のファイルに適用し、最初の列は拡張子のないファイル名で、2番目の列はそのファイルのコマンドの結果bam
として単一のファイルに出力を保存するにはどうすればよいですか?samtools
たとえば、次のようになります。
TCGA-BH-A0BW-11A 550
TCGA-BH-A0BW-01A 220
TCGA-CH-A0BW-11A 100
私はLinuxシステムで作業しています。
答え1
を使用している場合は、bash
適切な拡張子を持つすべてのファイルを繰り返し、次のように処理できます。
for file in *.sorted.bam
do
key="${file%.sorted.bam}"
value="$(samtools view -c "$file" "5:13744354-13744380")"
echo "$key $value"
done > output.txt
ループでは、
.sorted.bam
ファイル名の末尾から削除してファイルキーを生成し、それをシェル変数に保存しますkey
。- 単一ファイルの例に示す処理を実行し、出力をシェル変数に保存します。
value
- キーと値の印刷
ループの出力全体をファイルにリダイレクトしますoutput.txt
。