【发布时间】:2013-10-28 21:01:14
【问题描述】:
我尝试在 perl 驱动程序脚本中使用一些 unix 工具,因为我对编写 shell 脚本知之甚少。我的目的是将几个简单的 unix 命令组合在一起,这样我就可以在一个 perl 命令中在 100 个目录上运行脚本。
任务是我有100多个文件夹,每个文件夹中有n个文件。我想对每个文件夹做同样的事情,就是将其中的文件合并起来,对合并后的文件进行排序,然后使用bedtools合并重叠区域(生物信息学中很常见的做法)
这是我所拥有的:
#!/usr/bin/perl -w
use strict;
my $usage ="
This is a driver script to merge files in each folder into one combined file
";
die $usage unless @ARGV;
my ($in)=@ARGV;
open (IN,$in)|| die "cannot open $in";
my %hash;
my $final;
while(<IN>){
chomp;
my $tf = $_;
my @array =`ls $tf'/.'`;
my $tmp;
my $tmp2;
foreach my $i (@array){
$tmp = `cut -f 1-3 $tf'/'$i`;
$tmp2 = `cat $tmp`;
}
my $tmp3;
$tmp3=`sort -k1,1 -k2,2n $tmp2`;
$final = `bedtools merge -i $tmp3`;
}
print $final,"\n";
我知道这条线根本不工作..
$tmp2 = `cat $tmp`;
问题是如何将输出定向到 perl 中的另一个变量并稍后在另一个 unix 命令中使用该变量...
如果您能指出我可以更改以使其工作的地方,请告诉我。非常感激。
【问题讨论】:
-
你可能知道 shell 脚本,但这不是好的做法:永远不要解析
ls的输出是一个人应该学习的第一件事!亲爱的,您将美丽的语言 (Perl) 与最糟糕的 shell 脚本实践混合在一起! (无意冒犯)。 -
您能解释一下您的脚本应该做什么吗?
-
我有100多个文件夹,每个文件夹中有n个文件。我想对每个文件夹做同样的事情,就是将其中的文件合并起来,对合并后的文件进行排序,然后使用bedtools合并重叠区域(生物信息学中很常见的做法)