1

我想知道是否可以使用 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 感谢您提供有关通过文件执行此操作的信息。但是,很抱歉很痛苦,如果可能的话,我真的很想在不写文件的情况下这样做。

4

1 回答 1

0

我没有对此进行测试,但我认为它会起作用。

bedtools期待一个带有-i标志的参数,即.bed文件名。这是在文档中。您需要将数组写入文件,然后将其输入到bedtools merge命令中。

open(my $fh, '>', "input.bed") or die $!;
print $fh join("", @constit_super);
close $fh;

然后您可以使用文档中的以下命令对其进行排序:

`sort -k1,1 -k2,2n input.bed > input.sorted.bed`;

最后,您可以运行合并命令。

my $bedtools = `bedtools merge -i input.sorted.bed`;

希望这能让您走上正确的道路。

于 2014-09-27T20:36:27.353 回答