Parameters awk-在同一命令中传递参数(ARGV)和要分析的文件

Parameters awk-在同一命令中传递参数(ARGV)和要分析的文件,parameters,awk,arguments,Parameters,Awk,Arguments,我正在运行ubuntu11.10,我认为它默认使用mawk。假设我有一个名为“script.awk”的awk脚本,它接收一个参数。我还想指定要分析的文件的名称。因此,如果我将“10”用作解析“file”的参数,我应该运行: ./script.awk 10 file 但是,“10”被解释为要解析的文件,而不是参数。我知道我可以使用-v标志来设置内部变量,但我希望使用ARGV来检查是否传递了参数,如: if (ARGC < 2) { exit 1 } if(ARGC

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

./script.awk 10 file
但是,“10”被解释为要解析的文件,而不是参数。我知道我可以使用-v标志来设置内部变量,但我希望使用ARGV来检查是否传递了参数,如:

if (ARGC < 2) { exit 1 }
if(ARGC<2){exit 1}

是否有解决方法,否则我将不得不使用-v标志?

在使用参数之前,将执行awk脚本中的开始块。这使您有机会检查正确数量的参数并进行更改。有一种特殊行为,即如果参数是空字符串,则跳过它,因此可以执行以下操作:

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

如果(ARGC添加到上述注释中(添加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
输出:

它会被打印出来的。就像我用的NAWK

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

awk:无法打开1