【问题标题】: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 语句放在 BEGIN 和 END 块中,但没有任何效果。
【问题讨论】:
标签:
linux
bash
shell
unix
awk
【解决方案1】:
BEGIN{if (ARGC!=2) {print "<Gasp.sh> <inputfile>"; exit} {calc = 0;....}
【解决方案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 初始化为“-”,即使有要处理的数据文件。这种行为是不正确的,不应在您的程序中依赖这种行为。