シーケンス番号に基づいて大きな行チャンクを削除する

シーケンス番号に基づいて大きな行チャンクを削除する

次のように構成された次世代シーケンスデータでfastqファイルを処理しています。

  • シーケンサー、レーン、「タイル」、および読み取り数に関する行1情報
  • シーケンスのライン2情報
  • 3行目は+記号で区切り記号として使用されます。
  • 読み取り品質に関する4行情報

最初の行の5番目の位置(黒)の特定の数値範囲内のすべての読み取り値を削除したいと思います。

以下は、1101と1103の間の読み出しを削除する例です。入力する:

@ST-E00204:114:HHKTJALXX:4:1101:22962:1538_1:N:0:1/1
NGTTTGTTAATTATTAAGTTTTTTTTTTTTAAGGATTTTTATAGTAGTAATAGAAATTTAATTAAGATAGAAAATTTTAAGTGTGGTTAGGATTGTAGTTTTGTTGGTATTATGTTGATTTAGTATAAGTAAAGTTTTGATTTT
+
AAAAJJJJFJJAJJJAJAJJJJJJJJAJJ-FJJJJF--FJJJJFJJJFFJJJFFJ-JJJJFFFFJ-AJ7AJJJJJJJFJJJJFJFAJFFJJF-AAFAJFJJ7AJAJJFJFJJJ7FFFFFJFJJ-7F-77A JF--7FJ 제이


@ST-E00204:114:HHKTJALXX:4:1102:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAAAATATAAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTTT
+
!AA-FJJJJJJ-FJAJFJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFFF<-F<FJJJF-<7<JF<-7AAFFJ--A<A77--7FAAF-A----7FF-7-7<F -7--<F7---77<----7-<<FA---7<<---7---

@ST-E00204:114:HHKTJALXX:4:1103:7141:2012 2:N:0:1
NAAAACATAAAATATAACAAACAAACTAAAAATCATAAAAAATAAAAAAACATCCACTTAACAACTTAAAAAATAACAAATCACTAATTATAATAAAAAATAAAAAATAACACACTCTAACACCTAAAACAACCAAAAAAACTAAAACTCC
+
!AAFFFFJJJJA-F--AFFJJ-F<JJF<AJFJ<JF-7<JJAA7-J-FFFJ7JJJFJ-F<AJJJJFFJ-AF-AJ<FF-JFFF-77<JJ---777<7--7 -A <JA-7<<FFF<--7--7-FFFF-<---7---7A-<A7FA------7-

@ST-E00204:114:HHKTJALXX:4:1104:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAAAATATAAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTTT
+
!AA-FJJJJJJ-FJAJFJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFFF<-F<FJJJF-<7<JF<-7AAFFJ--A<A77--7FAAF-A----7FF-7-7<F -7--<F7---77<----7-<<FA---7<<---7---

希望の出力:

@ST-E00204:114:HHKTJALXX:4:1104:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAAAATATAAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTTT
+
!AA-FJJJJJJ-FJAJFJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFFF<-F<FJJJF-<7<JF<-7AAFFJ--A<A77--7FAAF-A----7FF-7-7<F -7--<F7---77<----7-<<FA---7<<---7---

1つのアイデアは、次を使用することです。

split -l 4 myfile.fq

次に、5番目の位置の数字に基づいて各ファイルを削除します。たとえば、次のようになります。

grep -v ":1104"
grep -v ":1105"

ちょっと待って、ところで問題はファイルが大きすぎるということです。また、1000 ~ 2000 など、各数字が多くの読み取り数に対応するように、より大きな間隔を削除する必要がありました。

答え1

アッ解決策:

awk -F':' -v RS="@" 'NR>1 && ($5<1101 || $5>1103){ print RS$0 }' myfile.fq

出力:

@ST-E00204:114:HHKTJALXX:4:1104:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAACTAAAAATCATAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTT
+
!A-A-FJJJJJJ-FJAJFJJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFF<-F

詳細:

  • -F':'- フィールド区切り記号:

  • -v RS="@"-@レコード区切り文字と見なされます。

  • ($5<1101 || $5>1103)- 必須項目が基準に合っていることを確認してください。」1101~1103の間の削除

答え2

これは、各ブロックの長さが正確に4行であると仮定する奇妙な解決策です。

awk -F ':' '
    NR % 4 == 1 { keep = ($5 < 1101 || $5 > 1103) }
    keep
'

説明する:

  • -F :フィールド区切り記号をに設定します:$5現在の行の5番目のフィールドです(1から始まり番号が付けられます)。
  • NR % 4 == 1 { … }NR % 4 == 1条件が true の場合、つまり現在の行番号が 4+1 の倍数の場合、中括弧内のコードが実行されます。
  • keep = (…)変数をkeep指定された条件に設定します。
  • lineは、keep変数がtrueの場合、現在の行を印刷すると言いますkeep。 4行ごとにのみ設定されるため、keep4行ブロック内のすべての行に同じように適用されます。

答え3

sed -e '
   /@/s/:/\n/4; /@/s/:/\n/4
   /\n110[1-3]\n/,/^$/d
   y/\n/:/
' fastq.data

  1. で始まる行にシリアル番号を表示してください@
  2. シーケンス番号1101、1102、または1103を含むブロックを削除します。
  3. 他のすべてのチャンクでは、トークンを削除して標準出力に送信します。

結果

@ST-E00204:114:HHKTJALXX:4:1104:7101:2012 2:N:0:1
NATTTAAAAATACCCACTATAAAACATAAAATATAACAAAAAAACTAAAAATCATAAAAAATAAAAAAAATCCACTTCACGTCTTTTAACAATTTCGTCATTTTTAACATCCTCAAATAAATTATTCTCATTTTCCATAACTTCCAATTTT
+
!A-A-FJJJJJJ-FJAJFJJJJJFJJAJJJJJJ-F-AJJJJJJ-F-FJJFJJFJFFFFF<-F

関連情報