微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我对 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 (element[0])。如您所见,每个唯一 ID 都是成对出现的,一个一个。我想尝试让我的程序将第一个 ID 与其第二个相同的 ID 匹配。我试图创建一个这个元素的新数组,然后用换行符分割这个数组:

foreach ($columns[0]){
          my @read_ID = split(/\n/);
          *Do something*
          }

我认为这会将每个读取 ID 分隔为 @read_ID 内的单独元素。然后我打算使用 if(exists())if($read_ID[0] == $read_ID[1]) 来测试这些行是否匹配。当然,我已经可以在这里看到基本问题 - 我需要在由价值 33GB 的这些行(150+ 百万)组成的文件中为每一行/元素声明这一点。因此,我得出的结论是,使用特殊变量 $_,我可以使用每一行的输入,允许对每个匹配的行进行连续循环。但是,我意识到只有以下行会与原始输入匹配,此后每 2 行它就会不断变化 - 杀死循环。

我首先问我的方法/想法是否看起来合乎逻辑和适当,如果是,那么我如何添加一个循环,允许检查 2 行,然后更改以下 2 个唯一 ID?我希望这不会太令人困惑,因为我在打字时感觉会这样。非常感谢任何帮助!

愿意。

解决方法

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

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

while (1) {
   defined( my $line1 = <$fh> )
      or last;
   defined( my $line2 = <$fh> )
      or die("Incomplete file\n");

   my @fields1 = split(" ",$line1);
   my @fields2 = split(" ",$line2);

   $fields1[0] eq $fields2[0]
      or die("Ids of lines ".( $. - 1 )." and $. don't match.\n");

   # ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?