サンプリングされたペアエンドfastqファイルからのランダムな選択に関する質問があります。私はこの方法に関するいくつかの話題を読んだが、誰も私の問題を解決することができなかった: 私は2つのfastqファイルR1.fastqとR2.fastqを得た。私が達成したいのは、これらのファイルを無作為にサンプリングすることです。サンプリングされた各ペアから、ランダムに1つの読み取りのみを選択します。私は今のところです...fastqファイルの読み込みペアからのランダム読み出しの選択
私はseqtkを使用して、私のファイルをサンプリングしたのは何
:
seqtk sample -s100 R1.fastq 10000 > R1_sample.fastq
seqtk sample -s100 R2.fastq 10000 > R2_sample.fastq
は、私はこのようなシーケンスIDにより、各ファイルのソート順:
paste - - - - < R1_sample.fastq | sort -k1 -t " " | tr "\t" "\n" > R1_sample_sorted.fastq
をI R2_sample.fastqと同じことをしました。
pr -mts R1_sample_sorted.fastq R2_sample_sorted.fastq > merged.fastq
ファイルは次のようになります:
@D3YGT8Q1:297:C7T4RACXX:3:1101:1000 @D3YGT8Q1:297:C7T4RACXX:3:1101:1000
TGATGTTTGGATGTAAAGTGAAATATTAGTTGGCG AGCTTTCCTCACTATCTGCTTCATCCGCCAACTAA
+ +
BBBFFFFFFFFFFFIFFIFFIIIIFIIIFIIFIII B0<FFFFFFFFFFIIIIIIIIIIIIIIIIIIIIII
@D3YGT8Q1:297:C7T4RACXX:3:1101:1000 @D3YGT8Q1:297:C7T4RACXX:3:1101:1000
CCTCCTAGGCGACCCAGACAATTATACCCTAGCCA TGTTTAAGGGGTTGGCTAGGGTATAATTGTCTGGG
+ +
BBBFFFFFFFFFFIIIIIIIIIIIIIIIIIIIIII BBBFFFFFFFFFFIIIIIIIIBFFIIIIIIIIIII
@D3YGT8Q1:297:C7T4RACXX:3:1101:1000 @D3YGT8Q1:297:C7T4RACXX:3:1101:1000
TTCTATTTATTACCTCAGAAGTTTTTTTCTTCGCA GTAAAAGGCTCAGAAAAATCCTGCGAAGAAAAAAA
+ +
BBBFFFFFFFFFFIIIIIIIIFIIFIIIFIIIIII BBBFFFFFFFFFFIIIIIIIIIIIIIIIIIIIIII
そして今、私がランダムに1つだけ選択しますそれから私は、R1は2列目の1列R2になるようにソートされたファイルの両方を吸収合併しました各対から読み取る。
shuf -i1-2 -n1
、その後どういうわけか、私はSHUFからもらった番号にcooresponding読み込みを選択します。私の最初のアイデアは、範囲1-2から乱数を取得するためにSHUFを使用することでした。たとえば、最初の反復では1が得られたので、列1から読み込みを選択します。ソコード反復では、2番目の読み込みで2を取得します。2番目の列などで読み込みを選択します。
。だから私の質問は、これを行うためのきちんとした方法がありますか?たぶんawkや他の方法で?どんな助けも非常に高く評価されます。 Ashafixsの答えに
コメント:あなたの応答のための
おかげで、巨大な遅延のため申し訳ありません...! 私はあなたのソリューションをテストしましたが、両方とも欠陥があるようです。
最初のスクリプトでは、test fastqファイルR1とR2に6つの読み込みが含まれていました。スクリプトを実行した後、正しい順番(ID、seq、desc、qual)で6つの読み込み(24行)を出力するが、R1またはR2ファイルからランダムに選択された読み込みのセットとして出力することを期待する。私がスクリプトから得たものは次のとおりです。
@D3YGT8Q1:297:C7T4RACXX:3:1101:10002:27381 2:N:0:ATGCTCGTTCTCTCGT
AGCTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACATCAAGATC
+
B0<FFFFFFFFFFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIFIFIFIIIIIIIIII
@D3YGT8Q1:297:C7T4RACXX:3:1101:10004:50631 2:N:0:ATGCTCGTTCTCTCGT
@D3YGT8Q1:297:C7T4RACXX:3:1101:10007:32152 1:N:0:ATGCTCGTTCTCTCGT
GTAAGGTTAGGAGGGTGTTAATTATTAAAATTAAGGCGAAGTTTATTACTCTTTTTTGAATGTTG
+
BBBFFFFFFFFFFIIBFFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIFFFFFFFF
出力が正しくないことがわかります。 2回目の読み取りには3行がありません.3回ではなく6回の読み取りが必要です。さらに、スクリプトを実行するたびに、異なる数の読み込みが出力されます。
2番目のスクリプトでは、上記のようにマージされたfastqファイルを入力します。出力は最初のスクリプトの出力と似ています:
@D3YGT8Q1:297:C7T4RACXX:3:1101:10002:27381 2:N:0:ATGCTCGTTCTCTCGT
AGCTTTCCTCACTATCTGCTTCATCCGCCAACTAATATTTCACTTTACATCCAAACATCAAGATC
+
B0<FFFFFFFFFFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIFIFIFIIIIIIIIII
@D3YGT8Q1:297:C7T4RACXX:3:1101:10004:50631 2:N:0:ATGCTCGTTCTCTCGT
@D3YGT8Q1:297:C7T4RACXX:3:1101:10004:50631 2:N:0:ATGCTCGTTCTCTCGT
TGTTTAAGGGGTTGGCTAGGGTATAATTGTCTGGGTCGCCTAGGAGGAGATCGGAAGAGCGTCGT
+
BBBFFFFFFFFFFIIIIIIIIBFFIIIIIIIIIIIFFFIIIIIIFIIIIIFIIIFFFFFFFFFFF
@D3YGT8Q1:297:C7T4RACXX:3:1101:10004:88140 1:N:0:ATGCTCGTTCTCTCGT
ACTGTAACTTAAAAATGATCAAATTATGTTTCCCATGCATCAGGTGCAATGAGAAGCTCTTCATC
+
BBBFFFFFFFFFFIIIIIIIIIIFIIIIIIFIIIIIIIIIIIIIFIIIIIIIIIIIIIIIIIIII
@D3YGT8Q1:297:C7T4RACXX:3:1101:10007:32152 2:N:0:ATGCTCGTTCTCTCGT
CTAGTTTTGACAACATTCAAAAAAGAGTAATAAACTTCGCCTTAATTTTAATAATTAACACCCTC
+
BBBFFFFFFFFFFIIIIIIIIIIIIIIFFFIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIFIII
しかし、私はいつも5つの読みを取得します。それでもなお欠けている。また、2番目と3番目の読み取りヘッダーは同じです。これは起こらないはずです。
スクリプトで問題が解決しましたか? –