【发布时间】:2013-04-19 11:13:37
【问题描述】:
我正在尝试将一个大文件分成不同的文件,其中包含文件中每个变量的单个信息。
我的输入文件如下所示:
#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;
}
}
【问题讨论】:
-
所以你有相同的标题一遍又一遍,然后段落之间?指定更准确,以便我们给出更准确的答案。
-
您的代码似乎与您的问题无关。您的问题是关于将文件一分为二,而代码比较两个不同文件的匹配行。请澄清。
-
@fedorqui 正确,我一遍又一遍地使用相同的标题以及介于两者之间的段落。我想提取每个样本之间的信息,并(如果可能)保留一个石南花。抱歉,上述描述没有更详尽。
-
@dan1111 我正在尝试使用该示例 perl 脚本,只是为了查看是否能够在两个文件之间找到匹配项,然后将输出打印到不同的文件中。很抱歉没有说清楚。