我试图在两个文件之间找到相交的行。其中一个文件是'Sample_hg19_mapped.bed‘,另一个'intersect.RData’具有与第一个文件相同的数据。
床铺档案:
chrM 16338 16363 HWI-ST575:220:C2MMMACXX:3:1112:17158:21371 255 -
chrM 16352 16377 HWI-ST575:220:C2MMMACXX:3:1102:7906:41988 255 -
chrM 16352 16377 HWI-ST575:220:C2MMMACXX:3:2113:18341:36393 255 -
chrM 16376 16401 HWI-ST575:220:C2MMMACXX:3:1310:14517:85268 255 -RData文件:
HWI-ST575:220:C2MMMACXX:3:1310:14517:85268
HWI-ST575:220:C2MMMACXX:3:2113:18341:36393
HWI-ST575:220:C2MMMACXX:3:2113:45341:56393作为输出,它需要给出在RData.file中具有相同值的BED文件行。例如,RData的第一个和第二个值存在于BED文件中,而不存在于第三个文件中,因此在输出中需要这样做:
chrM 16376 16401 HWI-ST575:220:C2MMMACXX:3:1310:14517:85268 255 -
chrM 16352 16377 HWI-ST575:220:C2MMMACXX:3:2113:18341:36393 255 -我用这些代码来管理它:
perl -ane '$f=$F[0].$F[1]; print "$k{$f}$_" if $k{$f}; $k{$f}=$_;' Sample_hg19_mapped.bed intersect.RData但是,匹配的行在屏幕上,我希望它们保留在文件中,但我无法生成输出文件。我试了一次,改变了很多:
####!/bin/bash
perl -ane '$f=$F[0].$F[1]';"Sample_hg19_mapped.bed intersect.RData"
if $k{$f};$k{$f}=$_ {
print "$k{$f}$_";
} else {
print "epic fail";
}
open($f, ">", "output.txt")
or die "cannot open > output.txt: $!";
close $f;
print "done\n";但我犯了很多错误,比如:
/var/spool/slurmd/job2572366/slurm_script: line 3: Sample_hg19_mapped.bed intersect.RData: command not found
/var/spool/slurmd/job2572366/slurm_script: line 6: syntax error near unexpected token `}'
/var/spool/slurmd/job2572366/slurm_script: line 6: `} else {'你能帮我吗?非常感谢
发布于 2014-08-12 08:31:17
如果命令工作,但输出到屏幕,只需将其重定向到一个文件:
command > output.txt例如:
perl -ane '$f=$F[0].$F[1]; print "$k{$f}$_" if $k{$f}; $k{$f}=$_;' Sample_hg19_mapped.bed intersect.RData > output.txt如果要删除所有空行,可以将next if /^\s*$/;添加到开头:
perl -ane 'next if /^\s*$/; $f=$F[0].$F[1]; print "$k{$f}$_" if $k{$f}; $k{$f}=$_;' Sample_hg19_mapped.bed intersect.RData > output.txt这将跳过任何仅为空白的输入行。
发布于 2014-08-12 08:33:31
您的代码非常混乱,错误来自那里,不过如果您想要输出到一个文件,您可以这样做:
open (MYFILE, '>>NameOfFile');
print MYFILE $variable发布于 2014-08-12 09:24:45
试一试:
这使用您的RData值作为散列键,然后在床文件中查找它们,将任何匹配打印到“output.txt”。
use strict;
use warnings;
use autodie;
open my $bed, '<', 'in.txt';
open my $rdata, '<', 'Rdata.txt';
my (%bed, %rdata);
while(<$rdata>){
chomp;
$rdata{$_} = 2; # Each line is a key in the hash %rdata
}
open my $out_file, '>', 'output.txt';
while(<$bed>){
chomp;
next unless /chrM/;
my @split = split/\t/;
print $out_file "$_\n" if $rdata{$split[3]}; # will print to output.txt any line where the 4th column matches a key from %rdata
}https://stackoverflow.com/questions/25259411
复制相似问题