在我正在处理的目录中,有两个扩展名为 的文件.sam
:
PD180425_aligned_minimap.sam
PD180793_aligned_minimap.sam
对于这两个文件中的每一个,我需要应用如下命令:
samtools view -Sb pattern.sam > pattern.bam
我正在尝试用于xargs
此目的。我想做的是捕获之前的前缀_aligned_minimap
并使用它保存到我的输出中。我尝试的是以下内容:
ls *.sam | cut -d "_" -f 1 | xargs -i samtools view -Sb {}_aligned_minimap.sam > {}_aligned_minimap.bam
我希望必须生成 iePD180425_aligned_minimap.bam
和PD180793_aligned_minimap.bam
.尽管我的命令正在运行,但我在正在处理的目录中看到{}_aligned_minimap.bam
生成了该文件,这表明我尝试使用 xargs (PD180425
和PD180793
)捕获的输入不起作用。
我该怎么做呢?
答案1
我首选的方法是这样的:
for SAM_FILE in *.sam; do
samtools view -Sb "$SAM_FILE" > "${SAM_FILE/sam/bam}"
done
它可以制成一个衬垫,例如
for SAM_FILE in *.sam; do samtools view -Sb "$SAM_FILE" > "${SAM_FILE/sam/bam}"; done
这使用参数扩展来更改输出文件扩展名: https://wiki.bash-hackers.org/syntax/pe
在我看来,如果您或其他人稍后偶然发现您的脚本,这种风格可以清楚地表明您正在尝试做什么。
答案2
我的命令经过轻微修改,我认为它比for
循环更简单、更简洁:
ls *.sam | cut -d "_" -f 1 | xargs -I {} bash -c " samtools view -Sb {}_aligned_minimap.sam > {}_aligned_minimap.bam"