awk脚本头部:#!/bin/bash或#!/bin/awk -f?

4
在一个awk文件中,例如example.awk,头应该是#!/bin/awk -f还是#!/bin/bash
我提出这个问题的原因是,如果我在控制台中尝试这个命令,我会收到带有“文本行”的正确文件.txt:
 awk 'BEGIN {print "line of text"}' >> file.txt

但是,如果我尝试使用./example.awk执行以下文件:

#! /bin/awk -f
awk 'BEGIN {print "line of text"}' >> file.txt

出现错误:

$ ./awk-usage.awk
awk: ./awk-usage.awk:3: awk 'BEGIN {print "line of text"}' >> file.txt
awk: ./awk-usage.awk:3:     ^ invalid char ''' in expression

如果我将头文件更改为#!/bin/bash#!/bin/sh,它就可以工作。

我的错误是什么?原因是什么?

2个回答

7

由于您明确运行了 awk 命令,因此应使用 #!/bin/bash。如果您删除 awk 命令并仅包含 awk 程序(例如 BEGIN {print "line of text"}),则可以使用 #!/bin/awk,但是需要使用 awk 语法将内容附加到 file 中(print ... >> file)。

awk -f 命令需要一个包含 awk 脚本的文件,在这里完全不适用。


在这种情况下,我需要一个awk来在txt文件中进行搜索。所以如果我理解正确,我应该删除文件中所有awk的引用。在sed文件中也是一样的吗? - anvd
最后一个问题,是否可能将这个bash(在sh文件中工作)转换为awk文件? awk '/<SEN>|<REC>|<RECO>|<email>/' word.txt - anvd

2
你的脚本是一个包含awk命令的shell脚本。 #! /bin/sh告诉你的shell使用/bin/sh执行该文件作为shell命令 - 它是一个shell命令。如果你将其替换为#! /bin/awk -f,那么该文件将使用awk执行,基本上与执行相同。
/bin/awk -f awk 'BEGIN {print "line of text"}' >> file.txt 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接