我试图将一个大文件分成不同的文件,其中包含文件中每个变量的单个信息。
我的输入文件如下所示:
#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;
}
}
答案 0 :(得分: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;
}
答案 1 :(得分:0)
awk '/^#CHROM/{typ=$10;a[$0]++} a[$0]<2{print >> typ}' inputFile
这个awk脚本似乎有效+