mecobalamin’s diary

人間万事塞翁が馬

https://help.hatenablog.com/entry/developer-option

RNA-seqその4、Fastqファイルのマージ

クリーニングしたFastqファイルを一つにまとめる
mecobalamin.hatenablog.com

plinseq-liteで評価の良かったリードだけをマージする
ファイル名に"gd"を含むファイルを使うことになる
read 1とread 2を区別する

マージしたファイルは、マージ前と同じディレクトリに保存される

#!/bin/bash

dir_scripts="$HOME/usr/scripts/"
dir_working="$HOME/usr/data/"

dir_list_sra=${dir_scripts}
name_sra="list_sra.txt"
list_filename=$(cat ${dir_list_sra}/${name_sra} | sed 's/\.sra//g')

for i in ${list_filename}
  do
    dir_div_file="${dir_working}/raw/div_${i}"
    list_div_file="list_div_${i}.txt"
    list_read_1=$(cat ${dir_div_file}/${list_div_file} | grep _1_)
    list_read_2=$(cat ${dir_div_file}/${list_div_file} | grep _2_)

    echo "merge read 1"
    :> ${dir_working}/trim_${i}/ps/ps_${i}_gd_1.fastq
    for j in ${list_read_1}
      do
        cat ${dir_working}/trim_${i}/ps/ps_${j/_1_/_}_gd_1.fastq >> \
          ${dir_working}/trim_${i}/ps/ps_${i}_gd_1.fastq
        #echo ${i}, ${j/_1_/_}
      done

    echo "merge read 2"
    :> ${dir_working}/trim_${i}/ps/ps_${i}_gd_2.fastq
    for j in ${list_read_2}
      do
        cat ${dir_working}/trim_${i}/ps/ps_${j/_2_/_}_gd_2.fastq >> \
          ${dir_working}/trim_${i}/ps/ps_${i}_gd_2.fastq
      done
  done


14 April 2019追記
複数のファイルを処理していたら
trimmomaticのあとディスクの容量が足りなくなった
いくつか中間ファイルを消していたら
rawのディレクトリを間違って消してしまって
一緒に分割ファイルのリストも無くなった。。。

次に進めず。。。。

分割ファイルを再作成するスクリプト

mkdir $HOME/usr/data/raw/
f="$HOME/usr/scripts/list_sra.txt"
fn=$(cat ${f} | sed 's/\.sra//g')
for i in ${fn}; do mkdir $HOME/usr/data/raw/div_${i}; done
for i in ${fn}; do for j in {1..2}; do for k in 01 02 03 04 05 06 07 08 09 10; do :> $HOME/usr/data/raw/div_${i}/div_${i}_${j}_${k}; done; done; done
for i in ${fn}; do ls $HOME/usr/data/raw/div_${i}/ > $HOME/usr/data/raw/div_${i}/list_div_${i}.txt; done

空のファイル群を作成raw/に作成したあとに
ファイルのリストを作成する
あまりきれいな書き方ではないが一応大丈夫っぽい
コマンドライン上で動かしていたのでfor文も一行で書いている
このままシェルスクリプトファイルにしても動くかも

追記ここまで


20 April 2019追記
別の処理中にペアエンドのリードの数が1と2で違っている雰囲気があったので確認
前にも確認してたけど念のためもう一度
あとスクリプトの記録

$ cat hogehoge_gd_1.fastq | wc -l
61570060
$ cat hogehoge_gd_2.fastq | wc -l
61570060

リードの数は同じ
4の倍数かどうかも確認
割り算だと整数で返してくるので余りを求める

$ echo $((61570060%4))
0

いくつかマージ後のファイルを調べたけど大丈夫そう
マージ前は?

$ for i in 01 02 03 04 05 06 07 08 09 10; do echo $(($(cat hogehoge_${i}_gd_1.fastq | wc -l)%4)); done

こっちも問題なさそう

追記ここまで