Ich habe kein Problem den folgenden Befehl von AWK als Stand-alone-Befehl, ohne Fehler:Warum funktioniert mein awk-Einzeiler nicht, wenn ich ihn von Perl aus anrufe?
$ awk '$9 != "NTM" && $9 != ""' myfile.txt | less -Sn
Aber wenn ich sie in Perl-Skript gelte für qsub Befehl (dh Job in Linux-Cluster ausgeführt wird), dies wie:
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
}
Es gab den folgenden Fehler
awk: cmd. line:1: != "NTM" && !=""
awk: cmd. line:1:^syntax error
Was das Rigg ist ht Weg, es zu tun?
Das Entfernen des Semikolons hat keine Auswirkungen auf das Verhalten in meiner Perl-Version (5.10) - es fügt immer noch Leerzeichen für die $ 9 Variablen ein. Welche Version laufen Sie? – paxdiablo
Tut mir leid, streiche das, ich habe die einfachen Anführungszeichen um das EOF vergessen. Aber jetzt haben Sie ein anderes Problem, die $ Datei und $ nn werden * nicht * von Perl interpretiert, wie sie sein sollten. – paxdiablo
ah richtig, ich habe nicht genau genug geschaut, du musst etwas Backslash machen, wenn du es in einem Block behalten willst – Yann