Question: from .BAM to .BAI using samtools
8
gravatar for Kizuna
4.7 years ago by
Kizuna780
France, Paris
Kizuna780 wrote:

Hi !

I have many .bam that I want to get their .bai using samtools in the terminal.

I tried the following command :

samtools index *.bam

However, I did not get any .bai file.

Regards 

sequencing samtools next-gen • 35k views
ADD COMMENTlink modified 11 days ago by eidriangm0 • written 4.7 years ago by Kizuna780
13
gravatar for Pierre Lindenbaum
4.7 years ago by
France/Nantes/Institut du Thorax - INSERM UMR1087
Pierre Lindenbaum121k wrote:

using GNU parallel:

 

 parallel  samtools index ::: *.bam
ADD COMMENTlink written 4.7 years ago by Pierre Lindenbaum121k

thanks this is useful. Do you know what is the optimal way of setting -j ? Without setting it does it just default to max cores? Or should I set it to something total core minus 1. That is if I have 8 then I will just set it to 7? thanks.

ADD REPLYlink written 5 months ago by simplitia30
4
gravatar for donfreed
4.7 years ago by
donfreed1.4k
Mountain View, CA
donfreed1.4k wrote:

Samtools index only accepts a single input file, so using a shell metacharacter to specify multiple files will not work. I usually use a shell wrapper to run samtools index on a single file at a time.

#!/usr/bin/env bash

# index_all.sh

for INFILE in "$@"
do
   samtools index $INFILE
done

Then it is simple to run: 

./index_all.sh /directory/*.bam
ADD COMMENTlink written 4.7 years ago by donfreed1.4k
5
gravatar for Jonathan Crowther
4.7 years ago by
Leuven/Dublin
Jonathan Crowther180 wrote:

You need to point the results to a file to create this:

So for one file it would be 

samtools index file.bam  file.bam.bai

See this link for a great description: Here

 

 

In your case with many bam files I would do it in a shell script as follows:

#!/bin/bash

for i in *.bam

do

echo "Indexing: "$i        

samtools index $i $i".bai"

done

 

 

ADD COMMENTlink modified 4.7 years ago • written 4.7 years ago by Jonathan Crowther180
2

The samtools index foo.bam foo.bam.bai syntax won't work with the two most recent versions of samtools. The way to do this is simply samtools index foo.bam. Enabling people to specify alternate index filenames is low on the priority list.

ADD REPLYlink written 4.7 years ago by Devon Ryan90k

@Devon Ryan: Yes indeed, with my samtools version I need to write samtools index foo.bam

So if I understood well , You are saying that the *.bam won't work with my samtools version?

ADD REPLYlink written 4.7 years ago by Kizuna780
4

*.bam won't work with any samtools version. I should note that understanding why this is the case will be helpful for you in general (this will be the case for many tools), so I'll explain that.

Assume you're in a directory with three BAM files: A.bam, B.bam and C.bam. When you type samtools index *.bam, your shell sees *.bam and expands it. Consequently, what samtools sees you as running is samtools index A.bam B.bam C.bam. That'd be fine if samtools index could accept more than one input file at a time, but it can't. Further, it may either then see you as using the alternate syntax that Jonathan Crowther mentioned or simply die due to not knowing what to do (I'd have to check the source code, though I expect the former would happen.

So, what you want to do is simply iterate over the files with a for loop:

for f in *.bam
do
    samtools index $f
done
ADD REPLYlink modified 4.7 years ago • written 4.7 years ago by Devon Ryan90k

Very helpful Devon Ryan Tx !

ADD REPLYlink written 4.7 years ago by Kizuna780

@Jonathan Crowther : Tx! I will give it a try 

ADD REPLYlink written 4.7 years ago by Kizuna780
0
gravatar for eidriangm
11 days ago by
eidriangm0
eidriangm0 wrote:

bash one-liner loop:

# Considering that you are inside the folder where the bams are: for bam in $(ls *.bam); do samtools index $bam; done

ADD COMMENTlink modified 11 days ago • written 11 days ago by eidriangm0

this works fine given that parallel installed " parallel samtools index ::: *.bam" as @Pierre Lindenbaum answered

ADD REPLYlink written 11 days ago by krushnach80500
Please log in to add an answer.

Help
Access

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 2.3.0
Traffic: 1606 users visited in the last hour