FASTQファイルからシーケンスラインを抽出する方法は?

FASTQファイルからシーケンスラインを抽出する方法は?

以下に示すように、FASTQ形式のIlluminaシーケンスファイルがあります。

@ERR009148.2485 IL26_1382:7:1:224:616 length=36
ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
+ERR009148.2485 IL26_1382:7:1:224:616 length=36
>>>>>>>>>>>>>>>>>>><>><>>>5>>->><->*
@ERR009148.2486 IL26_1382:7:1:914:59 length=36
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
+ERR009148.2486 IL26_1382:7:1:914:59 length=36
.>>74::1>174151/7152313,3&003,00&2%2
@ERR009148.2487 IL26_1382:7:1:251:589 length=36
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
+ERR009148.2487 IL26_1382:7:1:251:589 length=36
>>>>>>>>>>>>>>>>>>>>>>8>>>>>>><;<>>7
@ERR009148.2488 IL26_1382:7:1:911:194 length=36
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG
+ERR009148.2488 IL26_1382:7:1:911:194 length=36
<>>>=>>>>>>>=;<:>>7>==<<7;=67=/57/57

各レコードから元のシーケンスを抽出するだけです。sed これを達成するためにどのコマンドを使用できますか?

予想出力:

ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG

答え1

使用sed

sed -En '/^[ATGC]+$/p' infile

使用grep:

grep -E '^[ATGC]+$' infile

使用awk:

awk '/^[ATGC]+$/' infile

これらのコマンドはすべて、文字セットのみを含む行を返しますA, C, T, G

答え2

あなたは始めたいですFASTQ形式ファイル:

GNUを使用してファイルに空白行がないと仮定すると、次のようになりますsed

$ sed -n '2~4p' file.fastq
ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG

この式は、入力データの2行目から始まり、4行()ごとに()を2~4p印刷します。p~4

より具体的で次の行を取得するには@

$ sed -n '/^@/{n;p;}' file.fastq

その後、その文字で始まる行を探し@、その行を見つけたらn次の行を読み取り()印刷します。

答え3

使用幸せ(以前のPerl_6)

~$ raku -ne '.put if m/^ <[ATGC]>+ $/;'  file

上記は、Perlシリーズのプログラミング言語であるRakuで書かれた答えです。 Rakuは、他の言語のエンジンよりも読みやすい強力な正規表現エンジンを備えています。

-nenon-autoprint:、、、、などのコマンドラインフラグを使用してawk入力行を読み取り、デオキシリボヌクレオチド文字で構成される行全体と一致するかどうかをテストします。一致するものが見つかると()行が表示されます(どの変数が出力されるかを明確にするための略語)。ATGC$_put.put$_.put

注:プログラマーは、次のように36マーシーケンスの一致を要求できます。

~$ raku -ne '.put if m/^ <[ATGC]>**36 $/;'  file

または、FASTQ形式を4フィールド(つまり行)レコード形式で指定するので、オールインおよびlines/rotorbatch4つにまとめて読み取ることができます。次に、2行目(例:「フィールド2…元のシーケンス文字」)、0インデックスされます.[1]

~$ raku -e '*.[1].put for lines.rotor(4);'  file

入力例:

@ERR009148.2485 IL26_1382:7:1:224:616 length=36
ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
+ERR009148.2485 IL26_1382:7:1:224:616 length=36
>>>>>>>>>>>>>>>>>>><>><>>>5>>->><->*
@ERR009148.2486 IL26_1382:7:1:914:59 length=36
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
+ERR009148.2486 IL26_1382:7:1:914:59 length=36
.>>74::1>174151/7152313,3&003,00&2%2
@ERR009148.2487 IL26_1382:7:1:251:589 length=36
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
+ERR009148.2487 IL26_1382:7:1:251:589 length=36
>>>>>>>>>>>>>>>>>>>>>>8>>>>>>><;<>>7
@ERR009148.2488 IL26_1382:7:1:911:194 length=36
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG
+ERR009148.2488 IL26_1382:7:1:911:194 length=36
<>>>=>>>>>>>=;<:>>7>==<<7;=67=/57/57

出力例(すべてのコード例):

ATCACATGCTCCTTGTTCTGCAGCTTGGTGCGGATG
AAAGAAGTAAAATAAGAAGGCAATGCTTGTGGAAGG
GCCATAAACACCCCAGCACCACATTCATCAGAAGGG
ATTGAGGTGGAGTAGATTAGGCGTAGGTAGAAGTAG

https://en.wikipedia.org/wiki/FASTQ_format
https://docs.raku.org/言語/regexes
https://raku.org

関連情報