nev*_*int 4 unix linux perl awk qsub
我使用以下AWK命令作为独立命令没有任何问题,没有任何错误:
$ awk '$9 != "NTM" && $9 != ""' myfile.txt | less -Sn
Run Code Online (Sandbox Code Playgroud)
但是当我在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
}
Run Code Online (Sandbox Code Playgroud)
它给出了以下错误
awk: cmd. line:1: != "NTM" && !=""
awk: cmd. line:1: ^ syntax error
Run Code Online (Sandbox Code Playgroud)
什么是正确的方法呢?
pax*_*blo 14
"\"在所有"$9"变量之前放置一个字符将修复它.他们正在被Perl解析.
以下脚本:
print <<EOF;
awk '$9 != "NTM" && $9 !=""' $file > $nn
EOF
Run Code Online (Sandbox Code Playgroud)
输出:
awk ' != "NTM" && !=""' >
Run Code Online (Sandbox Code Playgroud)
但:
print <<EOF;
awk '\$9 != "NTM" && \$9 !=""' \$file > \$nn
EOF
Run Code Online (Sandbox Code Playgroud)
输出:
awk '$9 != "NTM" && $9 !=""' $file > $nn
Run Code Online (Sandbox Code Playgroud)
但是,既然你想要$file和$nn被Perl解释,实际的行应该是:
awk '\$9 != "NTM" && \$9 !=""' $file > $nn
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3206 次 |
| 最近记录: |