【问题标题】:Using FILENAME in awk script在 awk 脚本中使用 FILENAME
【发布时间】:2018-02-10 20:55:18
【问题描述】:
#!/usr/bin/awk -f

{if(!FILENAME) {print "<Gasp.sh> <inputfile>"; exit} calc = 0;....}

我试图在我的 awk 脚本中打印出一个用法语句,因此如果脚本在没有输入文件的情况下运行,它会显示用法。这是我的尝试,但我假设我没有正确使用 FILENAME 变量。我还尝试将 if 语句放在 BEGINEND 块中,但没有任何效果。

【问题讨论】:

    标签: linux bash shell unix awk


    【解决方案1】:
    BEGIN{if (ARGC!=2) {print "<Gasp.sh> <inputfile>"; exit} {calc = 0;....}
    

    【讨论】:

    • ... 和 ARGC!=2 是准确的。
    【解决方案2】:

    改用ARGC

    BEGIN {
        if(ARGC==1) {
            print "<Gasp.sh> <inputfile>"
            exit
        } 
        calc = 0
        # ...
    }
    

    编辑:不幸的是@shaikisiegal 删除了他的答案,所以我将在此处添加来自 GNU awk 文档部分内置变量的引用:

    文件名 这是 awk 当前正在读取的文件的名称。当命令行上没有列出数据文件时,awk 从标准输入中读取,并且 FILENAME 设置为“-”。每次读取新文件时都会更改 FILENAME(请参阅读取输入文件部分)。在 BEGIN 规则中,FILENAME 的值为 "",因为还没有处理任何输入文件。

    Unix awk 的一些早期实现将 FILENAME 初始化为“-”,即使有要处理的数据文件。这种行为是不正确的,不应在您的程序中依赖这种行为。

    【讨论】:

      猜你喜欢
      • 2018-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多