Hay varias formas. Aquí hay dos:
-
samtools idxstats ‹bamfile›
-
samtools view -H ‹bamfile› | grep '^ @ SQ'
Ambos comandos le dan una lista de las referencias en el archivo BAM. Para obtener su número, simplemente agregue | wc -l
. Pero tenga en cuenta que idxstats
también genera una entrada final, *
, que no corresponde a ninguna referencia sino a todas las lecturas no asignadas. Así que reste eso del número.
Sin embargo, tenga en cuenta que si bien esto enumera todas las referencias asociadas con un archivo BAM, no todas las referencias necesariamente tienen registros asociados. Por lo tanto, es posible que no haya una asignación de lecturas a una referencia determinada. Esta es la tercera columna de la salida idxstats
. Entonces, para obtener solo aquellas referencias con al menos una lectura mapeada, podemos filtrar por esas:
samtools idxstats ‹bamfile› | awk '$ 4! = 0' | head -n-1 | wc -l
Ah, y estos (y otros) comandos funcionan en archivos BAM , no en SAM. El comando idxstats
también necesita el índice BAM, ya que en realidad está leyendo información de ese archivo de índice, no del BAM (esto también significa que solo funciona en archivos BAM ordenados). Trabajar en SAM requeriría recorrer todo el archivo, lo cual es bastante ineficiente. Por lo general, debería trabajar con BAM en lugar de SAM, por lo que es de esperar que esto no sea una restricción.
Para hacer lo mismo en un archivo SAM, debe iterar sobre el archivo:
awk '{print $ 3}' ‹samfile› | sort -u | wc -l
O:
awk '{refs [$ 3] = 1} END {for (ref in refs) print ref}' ‹samfile ›| wc -l