macでインフォマティクス

macでインフォマティクス

HTS (NGS) 関連のインフォマティクス情報についてまとめています。

samやfastqの単純分割

2020 3/20 コマンド修正

 

リードの境目を気にせず、とにかくfastqやsamを分割したいという時は、splitコマンドが使いやすい。fastqを認識して正しく分けるならseqkit split(紹介)を使う。

 

--非圧縮ファイルの分割--

1000MB (1GB) ずつ分割し、gzip圧縮して保存(圧縮出力なのでそれぞれの出力は1GBよりずっと小さくなる)

split -b 1000m input output_ && gzip output_*

#pigzを使う。ここでは16スレッド指定。8GBずつ分割。
split -b 8000m input output_ && pigz -p 12 output_*

非圧縮出力で良いなら、&&の手前まででOK。

 

--gzファイルの分割--

1000Mbずつ分割し、gzip圧縮して保存。解凍してからsplitに渡している。

#mac osx (linuxマシンならzcat)
gzcat input_file.gz |split -b 1000m - output_ && gzip output_*

#pigzを使う。
gzcat input_file.gz |split -b 1000m - output_ && pigz -p 16 output_*

splitコマンドは単純に等分に分けているだけなので、分割したファイルを解析に使ってはならない。使う際は、コンカテネートして元に戻す必要がある。

 

再合体

分割されたファイルの再コンカテネートはcatを使う。

cat output_* > merged

 gzippingファイルのコンカテネートもcatを使う。

 

bamにしてからマージするならsamtoolsを使う(merge)。

 

ファイルのチェック

破損がないか、ファイルをチェックする。

1、fastq(FastQValidatorでfastqデータを検証する)

fastQValidator --file input.fastq 

2、bam(sam/bamファイルを変換、編集したり分析する)

bamutils check input.bam 

 

時間測定

1、10GBのfastqを1GBずつに分割してgz保存。timeをつけてランタイムも計測。

#非圧縮fastq
time split -b 1000m input.fastq output_ && gzip output_*

分割にかかった時間は10.3秒だったが、そこからgzip圧縮するのに10分近くかかった。

 

2、上記のファイルをgz圧縮して、gzファイルの分割、gz出力にかかる時間を計測。

#gz圧縮fastq
time gzcat input_file.gz |split -b 1000m - output_ && gzip output_*

ファイルサイズが2.8GBのgzファイルの分割にかかった時間は34秒だった。ただしそこからgzip圧縮出力には1のケースと同じくらいの時間がかかった。

追記

急ぎなら並列動作するpigzなどの圧縮器を使う。gzcatがないならzcatで

zcat input_file.gz |split -b 1000m - output_ && pigz -p 8 output_*

 

 

もしリード単位の分割を行うならfastq splitter(リンク)を使うか、もしくはスクリプトを書く。

 

Multi=fastaをヘッダーごとに分割したいならBBtoolsを使う。

bamの分割


引用

Question: Split Fastq Files Into Chunks Of 1M Reads

https://www.biostars.org/p/10756/

 

How to split a file and compress directly?

https://serverfault.com/questions/598647/how-to-split-a-file-and-compress-directly

 

gzip 圧縮したテキストファイルは cat でつなげても大丈夫だよ - Qiita