linux - 当我从 Perl 调用时,为什么我的 awk 单行代码不起作用?

标签 linux perl unix awk qsub

我将 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/

相关文章:

linux - 将带引号的字符串传递给 ssh

perl - 如何将数组和散列数据类型传递给 perl 中的子例程参数?

perl - LDAP 身份验证 CGI

linux - 我的 init.d 服务无法识别

linux -/usr/share/code/bin/../code : error while loading shared libraries: libX11-xcb. so.1:无法打开共享对象文件:

作为组成员的 PHP 用户无法写入文件夹

regex - 从正则表达式组中删除某些字符

perl - 如何用Perl将指定格式的数据写入二进制文件?

linux - Bash 脚本检查大写字母的字符串

linux - SCP 在两个远程服务器之间传输文件而不提示输入密码