【发布时间】:2018-08-07 21:14:30
【问题描述】:
我有 2 个文件(paired_end),读取来自同一生物体的 fastq 格式(File_R1.fastq 和 File_R2.fastq)。我想使用 bwa 和 samtools (生物信息学)确定深度覆盖,为此我需要两个具有相同读取次数、相同名称的文件(file_1:@XX00341:4450:6341 1:N:0:AACGTTAA+ TTGCAATT and file_2: @XX00341:4450:6341 2:N:0:AACGTTAA+TTGCAATT),在两个文件中的顺序相同,问题是两个文件都有空读取(每个文件对应的读取,可能在一个,但不是另一个!!!!),如果我尝试用 bwa 运行它,它会由于空序列而失败。
所以我正在尝试制作一个 perl 脚本来提取两个文件中具有相同名称和顺序的 NO 空读取。
这是fastq文件的格式(每次读取有4行:名称(@XX00341:19:000H27K25:1:11101:4450:6341 1:N....),序列(GAGGTGCGTGGTTGTCACCCC...), Q_head (+) 和 Quality (FFFFFFFFFFFFFFF....),按此顺序。
file_r1.fastq(以 = .... 1:N:0:AACGTTAA+TTGCAATT 为特征)
@XX00341:4450:6341 1:N:0:AACGTTAA+TTGCAATT
CGCCCATCATGAGGTGCGTGGTTGTCACCCCCGCAAACGCGGAGGTGTAAACAGGCTCACCTGTGGGTTGTTGGTAGTCGTTATTGTGCTTGCGCTGTTCATCTGGATTACTGGATTCGACGCGTTGAGC
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
@XX00341:14420:6341 1:N:0:AACGTTAA+TTGCAATT
GCTTTGTCGTCGTCGGTTTTAAAGTGAACCGCTTTACCTGTTTCTGCTTGAACTTGTTCTGCTTGAGGTGCTGCTTCTGGTTTTGTTTCTTCTTTCTGACAACCTACCGCTAGCATTACTGTTGCAGCAA
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/FFFFAAFFFFFFAFFFFAFFFFFFFFFFAFAFFFFFAFFFFFFFFFFFFFFFFAFFFFFFFFFFFFFAFFFFFFFAFFFFFFF/FFFFFFFFFFFF
@XX00341:10259:6342 1:N:0:AACGTTAA+TTGCAATT
+
@XX00341:6685:6342 1:N:0:AACGTTAA+TTGCAATT
CATTGGAAGGCAAGCCAGAACAAGGCAAGAATATTCCAGATGACATCGTGCGCGTTCGCATCGATCGCAACAGCGGTCTGCTGACTCATAAAGTGGATAGCACGTCCATGTTTGAATACTTTGAGAAAGG
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6FFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFAFFFFFFFFFFFFFFFFFFFFAFFFFFFAFFFFFFFFFFFFF
@XX00341:4051:6343 1:N:0:AACGTTAA+TTGCAATT
TCACCATGATCGGATTTATGAATGGTTTAGTGGACAGCATGATCAAAAATGCGATTGCTTGGCAAACCAGCCATTTGCAGATTCATCAAAGTGCTTATCTCGTTAATCCTGAACTGAAAGACACCATACC
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
@XX00341:12307:6344 1:N:0:AACGTTAA+TTGCAATT
TCCAAATTGAGAGTTAATGTGAAAAAAGAATGACTTTTTGCTTGTCATGCAGCGGATTTGTGTGATACCACTAATGACGCAAACATTTTCGTAGAACATTACACAATACTATTTAACGAAAAAAGAACGA
+
FAAFFAFAAFFAFFF/FF/FFAFFFFFFFFFAAFFF=F=AFFFFFFFFFFFFAFFFFFFFFFFAFFFFFFFFFFAFFFFFAAFFFFFFFFFF/FAFFFFAFFFFFFFFFFFFAAAFFAF///FAFFFFFF
@XX00341:24250:6345 1:N:0:AACGTTAA+TTGCAATT
CGAACATAGAGCAAGCTCTGGTAAGTCCCGATGGGAGCTTAAAGACACAAGTAGACCAAAAGCTCGCAGAACATGGCTTGAGCCGTAAAGTCACCGTGGCGTCGCGCAACTTTCTCACCATTCGGCATCT
+
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
file_r2.fastq(以 = .... 2:N:0:AACGTTAA+TTGCAATT 为特征)
@XX00341:4450:6341 2:N:0:AACGTTAA+TTGCAATT
GCGGCTTTGGTAGCGAAGCGCGTCTACCAACCGCAGCCATGAAACAACTGGCGTTTGAAGTGGAAAAAACGGCAGCGGGCAGTATTCCGGTACTGATTGAAGCCATCGAACAAGTGGCGGTGCCTACCGC
+
AFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFF/FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
@XX00341:14420:6341 2:N:0:AACGTTAA+TTGCAATT
GCGGTTCGAGTGGCCAACGTTGAACTTCATGCTCGGTAAAAAAGCAACCATTTAACGTGGTGATGACAATTAAATATAGGAATAAATGAGAAATTCTTTGCATCACATCTAATAATCCGGTTTGTGTCTT
+
AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/FFFAFAFFFFFFFF/FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFF
@XX00341:10259:6342 2:N:0:AACGTTAA+TTGCAATT
TCTTTTTTCGTTAAATAGTATTGTGTAAT
+
FFFFFFFFFFFFFAFFFFFFFFFFFFFFF
@XX00341:6685:6342 2:N:0:AACGTTAA+TTGCAATT
GAATAAATGCTGTCTTCGAGGCTGTTACCAACGTATTCGGTTGGCTCCGTGCCTTTCTCAAAGTATTCAAACATGGACGTGCTATCCACTTTATGAGTCAGCAGACCGCTGTTGCGATCGATGCGAACGC
+
AFFFFFFFFAFFFFAFFFFFFFFFFFFFFFFFFFFFFFF/FF/FFFFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFF=FF=FFFFFFFAFFFFFFF
@XX00341:4051:6343 2:N:0:AACGTTAA+TTGCAATT
GAAGCTATCATGCCATCGGCGAGAAACCGCTCCGATACGGCTTTCACGCTTTGATGCTTGTCTAACGTTGTCACGATGCTTTGCGAGTCAGGTATGGTGTCTTTCAGTTCAGGATTAACGAGATAAGCAC
+
AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
@XX00341:12307:6344 2:N:0:AACGTTAA+TTGCAATT
GTTCATCTGTCTGTCGTTCTTTTTTCGTTAAATAGTATTGTGTAATGTTCTACGAAAATGTTTGCGTCATTAGTGGTATCACACAAATCCGCTGCATGACAAGCAAAAAGTCATTCTTTTTTCACATTAA
+
AFFFFFFFFFAFFFFFFFFAFFFFFFFFFFFFFAFFFFFFFFFFFFFFFFFFFFFFFFFFFF=FFFFFFFAFFFFFFFAFFFFFFFFFF=FAFFFFFFFFAFFFAFFAFFFFFFFFA=AFF6AFFAFAFF
@XX00341:24250:6345 2:N:0:AACGTTAA+TTGCAATT
CCATAGCATGGCAATATCAAAATCCGCAACGGCGATCGGCGGCTTAACAGTAATGAGATCGTCTGAAAAGCCCTCCGCCAACGCCATTTTTTCTGGCACGATGGCAATGAGATCGCGCTTTTTCAATAGA
+
AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF/FFFFFFFFFFFFFFFFFFFFFFFFFFF
在这种情况下,file_1.fastq (@XX00341:10259:6342 1:N....) 中的一次读取是空的,第二和第四行是空的(序列和质量),但不是在 file_2 .fastq (@XX00341:10259:6342 2:N....);在此示例中,必须省略两个序列(每个文件中的 4 行)!!!
这是我要完成的代码:
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long;
my ($fastQ_R1, $fastQ_R2);
GetOptions (
'R1|r1=s' =>\$fastQ_R1,
'R2|r2=s' =>\$fastQ_R2,
);
sub extract_list {
my ($file_in) = @_;
open FILE, '<', $file_in or die "cant open the $file_in\n";
my (@elements, @list, @seq);
while(
defined(my $head = <FILE>) && # 1 line
defined(my $seq = <FILE>) && # 2 line
defined(my $qhead = <FILE>) && # 3 line
defined(my $quality = <FILE>) # 4 line
){
if ($seq=~ m/^$/g){
next;
}
else { push @seq, $head; }
}
close FILE;
foreach (@seq){
chomp;
@elements = split '\s', $_;
push @list, $elements[0]; # split to eliminate 1:N... (file_1) and 2:N... (file_2)
}
return @list;
}
my @list_R1 = extract_list ($fastQ_R1);
my @list_R2 = extract_list ($fastQ_R2);
到目前为止,我在两个文件中都有没有空序列(@list_R1 和 @list_R2)的列表,两个数组的比较将给出两个文件(@ common_elements) 从两个数组的比较中获得。
@list_R2=
@XX00341:4450:6341
@XX00341:14420:6341
@XX00341:6685:6342
@XX00341:4051:6343
@XX00341:12307:6344
@XX00341:24250:6345
@list_R2=
@XX00341:4450:6341
@XX00341:14420:6341
@XX00341:10259:6342
@XX00341:6685:6342
@XX00341:4051:6343
@XX00341:12307:6344
@XX00341:24250:6345
@common_elemnts=
@XX00341:4450:6341
@XX00341:14420:6341
@XX00341:6685:6342
@XX00341:4051:6343
@XX00341:12307:6344
@XX00341:24250:6345
因此,新数组 (@common_elemnts) 将用于搜索和提取每个文件的常见读取(4 行),并将提供两个输出文件:Files_R1_common.fastq(从 File_R1.fastq 获得)和 File_R2_common.fastq(从 File_R2.fastq 获得)。
任何建议,将不胜感激!!!! 非常感谢
【问题讨论】:
标签: arrays perl bioinformatics sequences fastq