0

我试图将一个大文件分成不同的文件,其中包含文件中每个变量的单个信息。

我的输入文件如下所示:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  PID008SM

...info here 1.....

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  CL001-SC

....info here 2....

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  CL001-SC

....info here 3....        

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  PID008SM

....info here 4....

在这种情况下,我想创建两个输出文件(一个用于 PID008SM 和 CL001-SC),其中包含与每个文件相关的信息。

CL001-SC 的输出:

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  CL001-SC

....info here 2...

....info here 3...

PID008SM 的输出

#CHROM  POS     ID      REF     ALT     QUAL    FILTER  INFO    FORMAT  PID008SM
....info here 1....

....info here 4....

我使用的脚本在 Perl 中,但任何建议都非常受欢迎。先感谢您。

代码:

#!/usr/bin/perl;
use strict;
use warnings;

my $file1 = $ARGV[0] ;
my $file2 = $ARGV[1];

open (F1, $file1); #Opens first .vcf file for comparison
open (F2, $file2); #2nd for comparison

my %file;

## Create the hash key with each line of the file2
while (<F2> ) {
        #chomp;
        $file{$_}='';
}

## Print the line , if key   exist in the hash ;       

foreach my $string (<F1>) {

        if ( exists $file{$_}) and ($string =~ /(#)(.+?)(#)/s) {
                print $string;
        }
}
4

2 回答 2

1

大概是这样的?

use strict;
use warnings;

open my $fh, '<', 'chrom.txt' or die $!;

my %fh;

while (<$fh>) {

  if ( /^#CHROM/ ) {

    my $name =  (split)[-1];

    if ($fh{$name}) {
      select $fh{$name};
      next;
    }

    my $file = "$name.txt";
    open $fh{$name}, '>', $file or die qq{Unable to open "$file" for output: $!};
    print STDOUT qq{Created file "$file"\n};
    select $fh{$name};
  }

  print;
}
于 2013-04-19T12:04:42.920 回答
0
awk '/^#CHROM/{typ=$10;a[$0]++} a[$0]<2{print >> typ}' inputFile

这个 awk 脚本似乎可以工作 +

于 2013-04-19T12:03:46.400 回答