从perl调用awk脚本



我试图通过我的perl脚本使用awk脚本。因此,当我尝试从命令行调用awk脚本时,它可以正常工作,如下所示

awk -f script.awk file.txt

…awk脚本打开file.txt并进行一些计算。

然而,当我试图通过我的perl脚本做同样的事情,我不能使它工作:(我已经尝试了一百万件事,没有工作。你能帮忙吗?这是我在perl脚本中使用的:

`awk '-f /path/to/script.awk /path/to/target/file.txt'`;

…但我得到一个"没有这样的文件或目录"。我试过没有单引号,没有双引号,没有-f,我已经在脚本中了。Awk和添加#!/bin/awk -f,以上所有的组合,没有一个是有效的。文件名中没有任何特殊字符,它们只是普通的名称。没有变量或其他任何东西

如果你能帮我一点忙,我会很感激的:)

谢谢!

你根本不需要任何引号:

$ cat test.awk 
{ print $1 }
$ cat script.pl 
use strict;
use warnings;
print `awk -f test.awk file`;
$ cat file
first second third
$ perl script.pl 
first

您的尝试失败的原因是'-f /path/to/script.awk /path/to/target/file.txt'周围的引号意味着它被视为awk的单个参数。

另外,为了清楚,当您在Perl中使用反引号执行命令时,将返回命令的输出,因此如果您希望显示它,应该使用print

也可以使用system代替反号。语法是system PROGRAM LIST,其中LIST是传递给PROGRAM(在本例中为awk)的参数列表。例如:

system "awk", "-f", "test.awk", "file";

值得一提的是,根据您的awk脚本的复杂程度,您可能需要考虑用一种语言或另一种语言来完成整个过程。

最新更新