【问题标题】:awk - Pass arguments (ARGV) and file to parse in the same commandawk - 传递参数 (ARGV) 和文件以在同一命令中解析
【发布时间】:2012-09-23 23:51:11
【问题描述】:

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

./script.awk 10 file

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

if (ARGC < 2) { exit 1 }

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

【问题讨论】:

    标签: parameters awk arguments


    【解决方案1】:

    添加到上面的注释(添加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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-07
        • 2016-09-28
        • 1970-01-01
        • 1970-01-01
        • 2021-02-01
        相关资源
        最近更新 更多