Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 不接受参数或输入文件的简单awk脚本_Linux_Shell_Awk_Terminal - Fatal编程技术网

Linux 不接受参数或输入文件的简单awk脚本

Linux 不接受参数或输入文件的简单awk脚本,linux,shell,awk,terminal,Linux,Shell,Awk,Terminal,我正在尝试编写一个简单的awk脚本,它不使用任何文件输入参数或任何东西。到目前为止,我只在编写hello world程序时对其进行了测试: #!/usr/bin/awk BEGIN{} {print "hello"} END{} 当我尝试使用:/program.awk在终端上运行它时,我收到一个错误awk:1:意外字符'。 为什么会这样? 感谢您将-f添加到shebang行的末尾,这样告诉awk,脚本如下所示: #!/usr/bin/awk -f 此外,由于没有输入,请将打印放入开始块中:

我正在尝试编写一个简单的awk脚本,它不使用任何文件输入参数或任何东西。到目前为止,我只在编写hello world程序时对其进行了测试:

#!/usr/bin/awk
BEGIN{}
{print "hello"}
END{}
当我尝试使用:
/program.awk
在终端上运行它时,我收到一个错误
awk:1:意外字符'。
为什么会这样?
感谢您

-f
添加到shebang行的末尾,这样告诉
awk
,脚本如下所示:

#!/usr/bin/awk -f
此外,由于没有输入,请将
打印
放入
开始
块中:

BEGIN {print "Hi"}

-f
添加到shebang行的末尾,如下所示,告诉
awk
脚本如下所示:

#!/usr/bin/awk -f
此外,由于没有输入,请将
打印
放入
开始
块中:

BEGIN {print "Hi"}

所以如果我理解正确的话-f标志告诉awk运行
/program.awk
脚本和
开始{}
块是用来做不需要输入文件的事情的?因此,主块
{…}
使用输入文件进行操作?几乎-当您运行
/program.awk
时,将创建一个新进程,并在该进程中执行
awk
,而
-f
告诉
awk
脚本遵循此文件。
BEGIN{}
中的内容会在读取任何输入之前执行,这非常适合于没有任何输入数据的用例。后续
{…}
中的内容会针对后续的每一行输入执行,但您没有输入,因此它可能会挂起等待。如果我没有输入文件,
END{…}
块是否也挂起,即使我不在脚本中创建主块?可能-我不确定实际逻辑,如果
awk
的味道不同,我也不会感到惊讶。请注意,始终可以将
/dev/null
用作空输入文件,将
yes
用作无休止的输入文件。否,
结束
块从不挂起。在旧的、损坏的awk中,没有输入和明确的
exit
语句的BEGIN块将挂起,但情况不同。我的建议-千万不要通过shebang调用awk,因为它剥夺了您将shell命令参数分离为awk参数和变量和/或围绕awk脚本执行shell功能(getopts?)的能力。只需从shell脚本显式调用awk即可。因此,如果我理解正确-f标志告诉awk运行
/program。awk
脚本和
开始{}
块用于执行不需要输入文件的操作?因此,主块
{…}
使用输入文件进行操作?几乎-当您运行
/program.awk
时,将创建一个新进程,并在该进程中执行
awk
,而
-f
告诉
awk
脚本遵循此文件。
BEGIN{}
中的内容会在读取任何输入之前执行,这非常适合于没有任何输入数据的用例。后续
{…}
中的内容会针对后续的每一行输入执行,但您没有输入,因此它可能会挂起等待。如果我没有输入文件,
END{…}
块是否也挂起,即使我不在脚本中创建主块?可能-我不确定实际逻辑,如果
awk
的味道不同,我也不会感到惊讶。请注意,始终可以将
/dev/null
用作空输入文件,将
yes
用作无休止的输入文件。否,
结束
块从不挂起。在旧的、损坏的awk中,没有输入和明确的
exit
语句的BEGIN块将挂起,但情况不同。我的建议-千万不要通过shebang调用awk,因为它剥夺了您将shell命令参数分离为awk参数和变量和/或围绕awk脚本执行shell功能(getopts?)的能力。只需从shell脚本显式调用awk。