在awk脚本中使用FILENAME

时间:2018-02-10 20:55:19

标签: linux bash shell unix awk

#!/usr/bin/awk -f

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

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

2 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

改为使用ARGC;

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

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

<强> FILENAME     这是awk当前正在阅读的文件的名称。当命令行中没有列出数据文件时,awk从标准输入读取,并且FILENAME设置为&#34; - &#34;。每次读取新文件时都会更改FILENAME(请参阅读取输入文件一节)。在BEGIN规则中,FILENAME的值为&#34;&#34;,因为尚未处理输入文件。

Unix awk的一些早期实现将FILENAME初始化为&#34; - &#34;,即使有数据文件需要处理。此行为不正确,不应依赖于您的程序。