【问题标题】:Call a Perl script in AWK在 AWK 中调用 Perl 脚本
【发布时间】:2012-05-30 21:53:56
【问题描述】:

我有一个问题,我需要调用传入参数的 Perl 脚本,并在 AWK BEGIN 块中获取 Perl 脚本的返回值。如下所示。

我有一个 Perl 脚本 util.pl

#!/usr/bin/perl -w
$res=`$exe_cmd`;
print $res;

现在在 AWK BEGIN 块 (ksh) 中,我需要调用脚本并获取返回值。

BEGIN { print "in awk, application type is " type;  
                    } \
            {call per script here;}

如何调用带参数的Perl脚本并得到$res的返回值?

res = util.pl a b c; 

【问题讨论】:

  • 我真的不是说这听起来很尖刻,但是有什么理由不只是用 Perl 制作整个脚本吗?除非它是一个大型成熟的 AWK 脚本,否则我可能会建议使用 Perl 来完成整个事情。
  • 确实如此。尤其是当您的 Perl 脚本无论如何都要向另一个进程发起攻击时。

标签: perl awk ksh


【解决方案1】:

将脚本导入getline:

awk 'BEGIN {
         cmd = "util.pl a b c"; 
         cmd | getline res; 
         close(cmd);
         print "in awk, application type is " res
     }'

【讨论】:

    【解决方案2】:

    我用于从ldap 查询中提取数据的 AWK 脚本的一部分。或许你可以从我下面的base64解码中找到一些灵感……

        /^dn:/{
            if($0 ~ /^dn: /){
                split($0, a, "[:=,]")
                name=a[3]
            }
            else if($0 ~ /^dn::/){
                # Special handling needed since ldap apparently
                # uses base64 encoded strings for *some* users
                cmd = "/usr/bin/base64 -i -d <<< " $2 " 2>/dev/null"
                while ( ( cmd | getline result ) > 0 ) { }
                close(cmd)
                split(result, a, "[:=,]")
                name=a[2]
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2015-11-08
      • 1970-01-01
      • 2015-06-01
      • 1970-01-01
      • 2015-02-25
      • 2016-11-22
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多