3

我正在运行 ubuntu11.10,我认为它默认使用 mawk。假设我有一个名为“script.awk”的 awk 脚本,它接收一个参数。我还想指定要解析的文件的名称。因此,如果我将使用“10”作为解析“文件”的参数,我应该运行:

./script.awk 10 file

但是 '10' 被解释为要解析的文件,而不是参数。我知道我可以使用 -v 标志来设置一个内部变量,但我想使用 ARGV 来检查参数是否被传递,例如:

if (ARGC < 2) { exit 1 }

是否有解决方法,或者我将不得不粘贴 -v 标志?

4

2 回答 2

2

awk 脚本中的 BEGIN 块在使用参数之前执行。这使您有机会检查正确数量的参数并进行更改。有一个特殊的行为,如果参数是一个空字符串,它会被跳过,所以你可以这样做:

  BEGIN {
    if (ARGC<3) exit(1);
    arg=ARGV[1]
    ARGV[1]=""
  }
于 2012-10-03T04:46:28.203 回答
0

添加到上面的注释(添加BEGIN之后)需要找到正确的awk。

我们有 awk 的版本(如 nawk、gawk)。尝试使用 man(或帮助)查找 ARGC 和 ARGV 属于哪个版本的 AWK 命令。使用相应的 AWK。

nawk 'BEGIN{if(ARGC>9) print "it ll get print . as i used NAWK" }' 1 2 3 4 5 6 7 8 9

输出 :

it ll get print . as i used NAWK

awk 'BEGIN{if(ARGC>9) print "It throw error . as i used AWK " }' 1 2 3 4 5 6 7 8 9

输出:

awk: can't open 1

于 2015-06-13T07:47:06.757 回答