# Trying to create a .bam file without the need for a .sam file

I'm trying to use the code specified in this link to create a .bam file without the need for a .sam file.

Here is the code I'm using:

bwa mem -R "@RG\tID:$$SAMPLE\tPL:illumina\tSM:$$SAMPLE" \
$$REF_PATH/hg38.fasta \ mapping/R1.fastq.gz \ mapping/R2.fastq.gz | \ samtools sort - | \ tee mapping/$$SAMPLE\.bam | \
samtools index - mapping/$SAMPLE\.bam.bai \ 2>> log  and I get the following error: [M::bwa_idx_load_from_disk] read 0 ALT contigs [E::main_mem] fail to open file  '.  The ref path and file locations work when creating and converting a .sam to a .bam file. Any ideas? • The problem is not in skipping the intermediate .sam format, but already the mapping step. Oct 22 '20 at 10:40 • That link does not contain that code — is there a different link it does come from? (Whatever tutorial it's from would benefit from an update. Writing the BAM file via tee so that you can pipe to samtools index is such a spectacular anti-pattern. Though it's unfortunate that sort is one of the subcommands that does not yet support samtools's new --write-index option.) Oct 22 '20 at 11:08 • Ha, I was wrong, the index is indeed loaded. The reads are not... The expected log should look like this: mapping [M::bwa_idx_load_from_disk] read 0 ALT contigs [M::process] read 1006360 sequences (150000291 bp)... ... Then I would follow @Bastian Schiffthaler's answer to find what's the problem with your reads. Oct 22 '20 at 12:12 • It turns out samtools sort does support --write-index since 1.10 after all. So this can be written more simply as bwa … | samtools sort --write-index -o mapping/$SAMPLE.bam - (plus a little more if you want to use a BAI index rather than ‑‑write-index's default CSI). Nov 19 '20 at 9:31

This is an error from bwa saying that it can't find your input files:

Here's a checklist:

1. Check that you have no whitespace after your \ newline breaks. I.e. \ is the very last character
2. Check that you have no whitespace in any path names
3. Quote your variables: $REF_PATH -> "$REF_PATH"
4. Use set -x at the top of your bash script to debug.