Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Perl-如何匹配数百万个耦合字符串?_Arrays_Perl_Bioinformatics_Fastq - Fatal编程技术网

Arrays Perl-如何匹配数百万个耦合字符串?

Arrays Perl-如何匹配数百万个耦合字符串?,arrays,perl,bioinformatics,fastq,Arrays,Perl,Bioinformatics,Fastq,作为一个整体,我对Perl和编程非常陌生,因此我的术语和编码思想可能会让人感到困惑或完全是胡说八道——请注意,为了我自己的理解,请您尽量不要使用行话,谢谢 我的问题的背景是,我有一个非常大的文件(33GB),其中包含多个方面的信息,我已经成功地将数据中的每一列拆分为单独的元素。数据格式的小快照如下所示: HWI-D00461:137:C9H2FACXX:4:1101:1117:1997 1:N:0:CTTGTA 101 0 101 0 HWI-D00461:137:C9H2FACXX:4:110

作为一个整体,我对Perl和编程非常陌生,因此我的术语和编码思想可能会让人感到困惑或完全是胡说八道——请注意,为了我自己的理解,请您尽量不要使用行话,谢谢

我的问题的背景是,我有一个非常大的文件(33GB),其中包含多个方面的信息,我已经成功地将数据中的每一列拆分为单独的元素。数据格式的小快照如下所示:

HWI-D00461:137:C9H2FACXX:4:1101:1117:1997 1:N:0:CTTGTA 101 0 101 0
HWI-D00461:137:C9H2FACXX:4:1101:1117:1997 2:N:0:CTTGTA 101 0 101 0
HWI-D00461:137:C9H2FACXX:4:1101:1229:1999 1:N:0:CTTGTA 48 0 48 53
HWI-D00461:137:C9H2FACXX:4:1101:1229:1999 2:N:0:CTTGTA 77 0 77 24
HWI-D00461:137:C9H2FACXX:4:1101:1162:2000 1:N:0:CTTGTA 101 0 101 0
HWI-D00461:137:C9H2FACXX:4:1101:1162:2000 2:N:0:CTTGTA 101 0 101 0
HWI-D00461:137:C9H2FACXX:4:1101:1393:1965 1:N:0:CTTGTA 69 1 70 31
HWI-D00461:137:C9H2FACXX:4:1101:1393:1965 2:N:0:CTTGTA 101 0 101 0
这是我的原始拆分代码:

open(FASTQ, "<", $input) or die "Failed to open '$input', $!\n";
while(my $line = <FASTQ>){
  chomp($line);
  my @columns = split(" ", $line); #Seperate columns by whitespace
  if($columns[5] > 0) {
    $n++; #Counts number of trimmed reads
我认为这会将每个读取ID分离为
@read\u ID
中的单独元素。然后我打算使用
if(exists())
if($read\u ID[0]==$read\u ID[1])
来测试这些行是否匹配。当然,我已经看到了这里的基本问题——我需要为每一行/元素声明这一点,在一个由33GB的行(1.5亿行)组成的文件中。因此,我得出的结论是,使用特殊变量
$\uu
,我可以使用每一行的输入,允许对每一匹配行进行连续循环。然而,我意识到只有下面的一行将匹配原始输入,此后它将每2行不断变化-终止循环

我首先要问的是,我的方法/想法是否合理,如果合理,那么我如何添加一个循环,允许检查两行代码,然后更改以下两个唯一ID?我希望这不是说得太混乱了,因为我觉得在打字的时候会这样。非常感谢您的帮助

威尔

每个唯一的ID成对出现,一个接着一个

要一次读取两行文件,可以使用以下命令:

while(1){
已定义(my$line1=)
或最后;
已定义(my$line2=)
或死亡(“不完整的文件”);
my@fields1=拆分(“,$line1);
my@fields2=拆分(“,$line2);
$fields1[0]相等$fields2[0]
或死(“行的ID”。($.-1)。”和$。不匹配。\n”);
# ...
}

请添加
使用严格
使用警告
位于每个Perl程序的顶部,尤其是刚开始的时候。您好,对不起,我应该在前面提到-这不是我的整个脚本,我在脚本的开头,即shebang之后都包含了这两个脚本。不幸的是,没有,但我会研究它,谢谢。您尝试拆分
$columns[0]
\n
在拆分第一段代码后,其中包含
HWI-D00461:137:C9H2FACXX:4:1101:1117:1997
,它看起来不正确。也许为每个数据字段添加一个标题(或者至少将其包含在描述中)不是一个坏主意。您可以将数据分割成一个散列,这将允许您使用类似
$line->{id1}
$line->{year}
$line->{counter1}
$line->{something}
。或者您可以一次拆分为一组变量。提示:由于成对是后续的,所以偶数和奇数行号一起进行。累积第一个进程并附加第二个进程并发出该对。冲洗和重复谢谢,这对我帮助很大。关于如何使用
定义的
函数,是这样的吗?一旦循环到达文件末尾,它就会终止?另外,我只是想知道,因为我在别处找不到答案,如果您继续定义filehandle,脚本会自动将filehandle解释为文件中的下一行吗?再次感谢!
foreach ($columns[0]){
          my @read_ID = split(/\n/);
          *Do something*
          }