Het BAM-bestandsformaat is geen op tekst gebaseerd formaat. Het heeft een specifieke binaire structuur, redelijk gedetailleerd gespecificeerd in de SAM-bestandsindelingsspecificatie. Telkens wanneer deze informatie als tekst op een scherm wordt weergegeven, moet deze worden geconverteerd van het binaire formaat naar een tekstformaat, wat wat tijd en verwerkingskracht kost.
Zoals deze vraag suggereert, al was het maar een specifiek veld uit alignementen nodig is (of velden), dan is het waarschijnlijk beter om alleen die velden te extraheren en de nodige conversie alleen op die velden uit te voeren. Hoewel dit kan worden gedaan door een geheel nieuwe BAM-parser te schrijven, hebben veel ontwikkelaars al softwarebibliotheken geschreven om BAM-bestanden op deze manier te verwerken.
Devon Ryan heeft htslib voorgesteld., wat een C-bibliotheek is die is geschreven door een groep die de mensen omvat die de SAM / BAM / CRAM-bestandsindelingsspecificaties hebben geschreven. Er is ook pysam, een python-wrapper rond htslib.
De specifieke tool die wordt gebruikt, hangt af van je bekendheid met programmeren en van het specifieke ding dat je wilt doen. Als je gewoon "een BAM-bestand wilt uitvoeren", dan is cat het snelst:
cat file1.bam
... maar waarschijnlijk doe je dat niet wil dat niet doen, omdat het lijkt alsof je een op tekst gebaseerde weergave wilt verwerken met een script. Omdat u niet heeft aangegeven in welke velden u geïnteresseerd bent, is het niet mogelijk om de beste oplossing voor te stellen. Uiteindelijk verwacht ik dat een "efficiënte" oplossing voor uw probleem in een of andere vorm htslib
zou omvatten. Dit is niet echt samtools hacken, het gebruikt de backend van samtools om BAM-gegevens te verwerken.
Het is echter handig om ook na te denken over de tijdskosten van coderen. Welke toepassing heeft u waardoor de tekstverwerkingsmethode niet voldoende is? Het kost tijd om code te schrijven, en veel meer tijd om die code te debuggen om er zeker van te zijn dat deze in alle situaties het juiste doet. Als dit voor een eenmalig iets is, dan is de uitvoer van samtools view
die in uw script wordt ingevoerd, wellicht de snelste oplossing.