我想知道是否可以使用perl数组作为名为bedtools(http://bedtools.readthedocs.org/en/latest/)的程序的输入
数组本身是由bedtools通过perl中的反引号方法生成的。当我尝试在另一个bedtools bash命令中使用perl数组时,它会抱怨参数列表太长,因为它似乎将数组中的每个单词或数字视为一个单独的参数。
示例代码:
my @constit_super = `bedtools intersect -wa -a $enhancers -b $super_enhancer`;
工作正常,可以通过以下方式查看:
print @constit_super
在屏幕上看起来像这样:
chr10 73629894 73634938
chr10 73636240 73639574
chr10 73639726 73657218
然后如果我再次尝试在bedtools中使用这个数组,例如
my $bedtools = `bedtools merge -i @constit_super`;
然后我收到此错误消息:
Can't exec "/bin/sh": Argument list too long
无论如何在bedtools中使用这个perl数组?
非常感谢27/9/14感谢您通过文件进行操作的信息。但是,如果可能的话,如果没有编写文件,我真的很想做到这一点。
答案 0 :(得分:0)
我还没有对此进行过测试,但我认为它会起作用。
bedtools
期待一个带有-i
标志的参数,即.bed
文件的名称。这是在docs。您需要将数组写入文件,然后将其输入bedtools merge
命令。
open(my $fh, '>', "input.bed") or die $!;
print $fh join("", @constit_super);
close $fh;
然后您可以使用docs中的此命令对其进行排序:
`sort -k1,1 -k2,2n input.bed > input.sorted.bed`;
最后,您可以运行合并命令。
my $bedtools = `bedtools merge -i input.sorted.bed`;
希望这能让你走上正轨。