首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用perl数组作为bash bedtools命令的输入

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

Stack Overflow用户
提问于 2014-09-28 03:10:03
回答 1查看 288关注 0票数 1

我想知道是否可以使用perl数组作为名为bedtools ( http://bedtools.readthedocs.org/en/latest/ )的程序的输入。

数组本身是由bedtools通过perl中的backticks方法生成的。当我尝试在另一个bedtools bash命令中使用perl数组时,它抱怨参数列表太长,因为它似乎将数组中的每个单词或数字作为单独的参数。

示例代码:

代码语言:javascript
复制
my @constit_super  = `bedtools intersect -wa -a $enhancers -b $super_enhancer`;

它运行良好,可以通过以下方式查看:

代码语言:javascript
复制
print @constit_super 

在屏幕上看起来像这样:

代码语言:javascript
复制
chr10   73629894    73634938
chr10   73636240    73639574
chr10   73639726    73657218

但是如果我再次尝试在床上工具中使用这个数组,例如

代码语言:javascript
复制
my $bedtools = `bedtools merge -i @constit_super`;

然后我收到这个错误消息:

代码语言:javascript
复制
Can't exec "/bin/sh": Argument list too long

有没有办法在bedtools中使用这个perl数组?

非常感谢

27/9/14感谢您提供的有关通过文件完成此操作的信息。但是,对不起,如果可能的话,我真的很想在不写文件的情况下这样做。

EN

回答 1

Stack Overflow用户

发布于 2014-09-28 04:36:27

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

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

代码语言:javascript
复制
open(my $fh, '>', "input.bed") or die $!;
print $fh join("", @constit_super);
close $fh;

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

代码语言:javascript
复制
`sort -k1,1 -k2,2n input.bed > input.sorted.bed`;

最后,您可以运行merge命令。

代码语言:javascript
复制
my $bedtools = `bedtools merge -i input.sorted.bed`;

希望这能让你走上正轨。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26078183

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档