我想从多个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
如何将该命令应用于多个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
通过从文件名末尾删除来生成文件密钥(并将其存储在 shell 变量中key
)- 执行单文件示例中所示的处理并将输出存储在 shell 变量中
value
- 打印键和值
并将循环的整体输出重定向到文件output.txt
。