awk - 传递参数(ARGV)和文件以在同一命令中解析

时间:2012-10-03 04:31:55

标签: parameters awk arguments

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

./script.awk 10 file

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

if (ARGC < 2) { exit 1 }

是否有解决方法,或者我必须坚持使用-v标志?

2 个答案:

答案 0 :(得分:1)

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

  BEGIN {
    if (ARGC<3) exit(1);
    arg=ARGV[1]
    ARGV[1]=""
  }

答案 1 :(得分: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