我将 AWK 的以下命令用作独立命令没有问题, 没有任何错误:
$ awk '$9 != "NTM" && $9 != ""' myfile.txt | less -Sn
但是当我在 Perl 的脚本中应用它们时 qsub (即在 linux 集群中运行作业)命令,如下所示:
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
}
报错如下
awk: cmd. line:1: != "NTM" && !=""
awk: cmd. line:1: ^ syntax error
正确的做法是什么?
最佳答案
在所有 "$9"
变量之前放置一个 "\"
字符将修复它。它们由 Perl 本身解析。
以下脚本:
print <<EOF;
awk '$9 != "NTM" && $9 !=""' $file > $nn
EOF
输出:
awk ' != "NTM" && !=""' >
但是:
print <<EOF;
awk '\$9 != "NTM" && \$9 !=""' \$file > \$nn
EOF
输出:
awk '$9 != "NTM" && $9 !=""' $file > $nn
但是,由于您希望 Perl 解释 $file
和 $nn
,实际行应该是:
awk '\$9 != "NTM" && \$9 !=""' $file > $nn
关于linux - 当我从 Perl 调用时,为什么我的 awk 单行代码不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/707981/