This is a test version of Biostars. For the public version, visit https://www.biostars.org.
Filtration of paired reads with both length higher than 50 from bam file

I understand that for filtering reads based on length i can simply use:

 samtools view -h file.bam | awk 'length($10) > 50 || $1 ~ /^@/' | samtools view -bS - > output.bam

But how can i select paired reads that both are longer than 50?

bam awk sed

Untested but may also work. Using BBMap suite.

samtools sort -n -o - file.bam | reformat.sh -Xmx6g in=stdin.bam out=filtered.bam minlength=50 requirebothbad=f

1 answer

using samjdk with option --pair:

$ java -jar picard.jar SortSam I=in.bam O=/dev/stdout SO=queryname | \
   java -jar dist/samjdk.jar --pair -e 'return records.stream().allMatch(R->R.getReadLength()>50);'

Log in to answer this question.