大量の fastq をトリミング "Trimmomatic"

大量の fastq をトリミングしたかったので。 以下のように、fastq データがあるときに while read で2行ずつ読み込んで処理する方法。

$ find | grep fastq.gz
RUN001_1.fastq.gz
RUN001_2.fastq.gz
RUN002_1.fastq.gz
RUN002_2.fastq.gz
RUN003_1.fastq.gz
RUN003_2.fastq.gz
...

以下に示す、loop_trimming.sh, trimming.sh を用意して、
パイプして実行する。

$ find | grep fastq.gz | loop_trimming.sh

trimming.sh

#!/bin/bash

CMDNAME=`basename $0`

while getopts i:j: OPT
do
  case $OPT in
    "i" ) FLG_A="TRUE" ; INPUT1="$OPTARG";;
    "j" ) FLG_B="TRUE" ; INPUT2="$OPTARG" ;;
      * ) echo "Usage: $CMDNAME [-i INPUT1.fastq(.gz)] [-j INPUT2.fastq(.gz)] " 1>&2
          exit 1 ;;
  esac
done

trimmed1=`echo $INPUT1 | sed s/.fastq.gz/_trimmed.fastq.gz/ `
trimmed2=`echo $INPUT2 | sed s/.fastq.gz/_trimmed.fastq.gz/ `
unpared1=`echo $INPUT1 | sed s/.fastq.gz/_unpaired.fastq.gz/ `
unpared2=`echo $INPUT2 | sed s/.fastq.gz/_unpaired.fastq.gz/ `

echo $INPUT1 $trimmed1 $unpared1
echo $INPUT2 $trimmed2 $unpared2

java -jar trimmomatic-0.36.jar \
    PE \
    -threads 1 \
    $INPUT1 \
    $INPUT2 \
    $trimmed1 \
    $trimmed2 \
    $unpared1 \
    $unpared2 \
    ILLUMINACLIP:adapters.fa:2:30:10 \
    LEADING:20 \
    TRAILING:20 \
    SLIDINGWINDOW:4:15 \
    MINLEN:36

loop_trimming.sh

#!/bin/bash

while true
do
    read line1
    read line2
    if [ -z "$line1" ] ; then break ; fi

    bash trimming.sh -i $line1 -j $line2
done

参考

Trimmomatic | FASTQ クリーニングツール

引数を処理する | UNIX & Linux コマンド・シェルスクリプト リファレンス