#!/usr/bin/env awk -f
开头。env命令没有-f
选项,因此他们必须将-f
选项传递给awk命令。我查看了awk的man页面。它说Awk会扫描每个输入文件,寻找与prog或-f progfile中指定的任何一组模式匹配的行。对于每个模式,当文件的一行与该模式匹配时,都可以执行一个相关联的操作。
据我理解,这意味着awk通过搜索在progfile/prog中指定的模式来处理输入文件,并根据使用的模式对找到的输入文件中的行执行相关联的操作。我的问题是...在运行awk脚本文件时,它如何工作?我们没有在#!/usr/bin/env awk -f
命令行中指定progfile。awk脚本将使用哪些模式?或者这是否意味着我们必须在运行awk脚本时传递progfile?如果是这种情况,那么在脚本中指定-f选项是否是多余的?如果我们不指定progfile,-f选项会被默认忽略还是会引发错误?为了更好地理解这一点,我编写了一个简单的awk脚本,并将其保存为test.awk。
#!/usr/bin/env awk -f
BEGIN { print "START" }
当我运行这个程序时,屏幕上会打印出字符串"START"。
prachis-mbp-2:~ pskhadke$ ./test.awk
START
如果我从awk脚本的第一行中删除
-f
选项并运行它,我将会得到以下错误:prachis-mbp-2:~ pskhadke$./test.awk
awk: syntax error at source line 1
context is
>>> . <<< /test.awk
同样地,
prachis-mbp-2:~ pskhadke$ awk test.awk
awk: syntax error at source line 1
context is
>>> test. <<< awk
awk: bailing out at source line 1
因为某些原因,如果没有使用-f
选项,它无法正确解析参数。但是为什么呢?
awk -f
的末尾。我点赞了所有正确的答案。 - Prachi#!/usr/bin/env awk -f
会导致错误。 - Enlico