【问题标题】:error by running a bash command in Perl script在 Perl 脚本中运行 bash 命令时出错
【发布时间】: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 中使用 wcawk。您正在使用$cont = &lt;&gt; 覆盖您的文件句柄,但由于您使用的是菱形运算符&lt;&gt;,因此您仍然在读取文件。
  • 我使用 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,您还可以将其存档,您的脚本将更加便携。

标签: perl bash awk


【解决方案1】:

非常感谢您的指导。 我相信我用新线解决了这个问题。 我使用了错误的 chomp 功能。 chomp($cont);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-30
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多