【发布时间】:2014-03-24 08:07:13
【问题描述】:
我编写了一个 Perl 脚本,以便在基于 lsf 的集群中自动发送大量作业。 问题是,由于我没有得到它的原因,它将作业分成两行,并且作业无法运行。 这是我的脚本:
my $controler = $ARGV[0];
open my $cont, $controler or die "Could not open $controler: $!";
my $str = qx(wc -l $controler | awk '{print $1}');
#my $str2 = system($str);
#my @count = split /\n/,$str;
#print $str;
for (my $f = 1; $f <= $str; $f++) {
#print $count[0];
`mkdir ~/Multiple_alignments/ELEMENTS-AUTO-$f`;
#`mkdir ../SCORES-AUTO-$f`;
}
while ( $cont = <>){
chomp;
my @lines = split /\t/, $cont;
my $count2 = $lines[0];
my $cover = $lines[1];
my $length = $lines[2];
my $rho = $lines[3];
my @files = <*maf>;
foreach my $file (@files) {
#print $file . "\n";
my $base = basename($file, ".maf");
#print "$base\n";
#print "$cover\n";
#print "$length\n";
#print "$rho\n";
print "`bsub -q q_cf_htc_work -R \"select[type==X86_64 && mem>6000]\" rusage[mem=6000] -M6000 -o /home/vasilis.lenis/Multiple_alignments/out-files/phastCons_$base.o -e /home/vasilis.lenis/Multiple_alignments/out-files/phastCons_$base.e -J phastCons$base phastCons --target-coverage $cover --expected-length $length --rho $rho --most-conserved ../ELEMENTS-AUTO-$count2/most_conserved_$base.bed --msa-format MAF $file mytrees_no3.noncons.mod --no-post-probs`\n";
}
}
我只是不明白为什么会这样。 (另外,我在第三行的 awk 命令不起作用)
提前谢谢你, 瓦西利斯。
【问题讨论】:
-
听起来你在某个变量中有一个换行符。不幸的是,我不能告诉你是哪一个,因为你提供的信息非常。您不需要在 Perl 中使用
wc或awk。您正在使用$cont = <>覆盖您的文件句柄,但由于您使用的是菱形运算符<>,因此您仍然在读取文件。 -
我使用 awk 只是为了创建与控制器文件行一样多的目录。我必须在它开始读取控制器的行之前创建目录。控制器文件有 4 列(制表符分隔),最后一个数字($rho 变量)有新行,但出于这个原因,我使用的是 chomp。
-
@Vasilis,阅读stackoverflow.com/help/asking 并提出一个重现您的问题的最小示例。
-
一个建议:最好使用内置的 'mkdir'(perldoc.perl.org/functions/mkdir.html) 或 File::Path 模块 (perldoc.perl.org/File/Path.html) 来创建目录,而不是调用 *nix 命令 'mkdir' .
-
为什么首先使用
my $str = qx(wc -l $controler | awk '{print $1}');?使用 Perl,您还可以将其存档,您的脚本将更加便携。