#!/bin/bash set -eu case $1 in --help) cat <&1 |head -n4 exit ;; esac # Parse the command line. bwasw='bwa bwasw' bwa_index='bwa index -a bwtsw' while getopts :j:l:v opt; do case $opt in j) bwasw="$bwasw -t$OPTARG";; l) ;; v) ;; \?) echo >&2 "abyss-bwasw: invalid option: $OPTARG"; exit 1;; esac done shift $((OPTIND-1)) query=("$@") target=${query[${#query[@]}-1]} unset query[${#query[@]}-1] index=$target.bwt # Build the index. if [ ! -r $index ]; then echo >&2 "Building the index $index..." echo >&2 $bwa_index $target $target $bwa_index $target $target 1>&2 elif [ $index -ot $target ]; then echo >&2 "The index $index is stale. Rebuilding the index..." echo >&2 $bwa_index $target $target $bwa_index $target $target 1>&2 else echo >&2 "The index $index is up to date." fi # Map the reads. echo >&2 $bwasw $target "${query[@]}" exec abyss-tofastq -i "${query[@]}" \ |$bwasw $target - \ |awk ' BEGIN { OFS = "\t" } /^@/ { print; next } $1 == x { next } { x = $1 } sub("/1$", "", $1) > 0 { $2 = or($2, 0x41) print; next } sub("/[23]$", "", $1) > 0 { $2 = or($2, 0x81) print; next } { print } '