Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用perl数组作为bash bedtools命令的输入_Arrays_Bash_Perl_Bedtools - Fatal编程技术网

Arrays 使用perl数组作为bash bedtools命令的输入

Arrays 使用perl数组作为bash bedtools命令的输入,arrays,bash,perl,bedtools,Arrays,Bash,Perl,Bedtools,我想知道是否可以使用perl数组作为名为bedtools()的程序的输入 数组本身是由bedtools通过perl中的backticks方法生成的。当我尝试在另一个bedtools bash命令中使用perl数组时,它会抱怨参数列表太长,因为它似乎将数组中的每个单词或数字视为单独的参数 示例代码: my @constit_super = `bedtools intersect -wa -a $enhancers -b $super_enhancer`; 工作正常,可通过以下方式查看: pri

我想知道是否可以使用perl数组作为名为bedtools()的程序的输入

数组本身是由bedtools通过perl中的backticks方法生成的。当我尝试在另一个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感谢您通过文件提供的信息。然而,很抱歉,如果可能的话,我真的很想不写文件就这样做

我还没有测试过这个,但我认为它会起作用

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`;
最后,您可以运行merge命令

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

希望这能让你走上正轨。

谢谢。这绝对是解决我问题的有效方法。但是,我恐怕忘了添加(现在已经修改了这个问题)是否可以只使用变量而不写入文件?如果这在技术上是不可能的,那么您的答案就是解决方案。@furryfoo is出现
merge
只接受一个文件作为输入。我认为您必须编写代码来执行merge自己所做的操作,而不必编写文件。错误消息是因为操作系统级别的限制限制了您可以在命令行上传递的数据量。除了在
ARG_MAX
kernel常量足够大以容纳您想要传入的所有数据的系统上运行之外,实在没有办法解决这个问题。但实际上,使用一个文件处理这么多的数据绝对是一个更好的主意。