Pregunta

No tengo ningún problema con el siguiente comando de AWK como un solo comando de soporte, sin ningún error:

$ awk '$9 != "NTM" && $9 != ""' myfile.txt  | less -Sn

Pero cuando les aplico el interior guión de Perl para qsub (es decir, en ejecución comando de empleo en cluster Linux), así:

use strict;
use Data::Dumper;
use Carp;
use File::Basename;

my $path = "/mypath/"; 
my @files = glob($path."*.txt");

foreach my $file ( @files ) {
print "$file\n";
    wy $base = basename($file,".fc-gn_".$type);
    my $nn = $path.$base.".out";

print "$file $nn\n";

    open PIPE, "| qsub" or die $!; 
    print PIPE <<EOF;
#!/bin/sh 
#PBS -N CLEAN
#PBS -l nodes=1:ppn=2 
#PBS -r n 

awk '$9 != "NTM" && $9 !=""' $file > $nn


EOF

}   

Se dio el siguiente error

awk: cmd. line:1:  != "NTM" &&  !=""
awk: cmd. line:1:  ^ syntax error

¿Cuál es la forma correcta de hacerlo?

¿Fue útil?

Solución

Poner un carácter "\" antes de que todas las variables "$9" lo arreglará. Están siendo analizados por sí mismo Perl.

La siguiente secuencia de comandos:

print <<EOF;
awk '$9 != "NTM" && $9 !=""' $file > $nn
EOF

salidas:

awk ' != "NTM" &&  !=""'  >

pero:

print <<EOF;
awk '\$9 != "NTM" && \$9 !=""' \$file > \$nn
EOF

salidas:

awk '$9 != "NTM" && $9 !=""' $file > $nn

Sin embargo, ya que desea $file y $nn a ser interpretado por Perl, la línea real debe ser:

awk '\$9 != "NTM" && \$9 !=""' $file > $nn

Otros consejos

puede utilizar la solución barra invertida, o hacerla más atractiva visualmente mediante el uso de:

print <<'EOF'

(y sin barra invertida), también si te gusta Perl, es posible que desee dar un tiro en gearman , que es realmente genial.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top