【问题标题】:awk script header: #!/bin/bash or #!/bin/awk -f?awk 脚本头:#!/bin/bash 或 #!/bin/awk -f?
【发布时间】:2011-01-12 15:08:00
【问题描述】:

在 awk 文件中,例如 example.awk,标题应该是 #!/bin/bash 还是 #!/bin/awk -f

我提出问题的原因是,如果我在控制台中尝试此命令,我会收到带有“文本行”的正确 file.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,它会起作用。

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

【问题讨论】:

    标签: linux bash shell awk


    【解决方案1】:

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

    awk -f 获取一个包含 awk 脚本的文件,所以这里完全错误。

    【讨论】:

    • 在这种情况下,我需要一个 awk 来在 txt 文件中进行搜索。因此,如果我理解正确,我应该删除文件中对 awk 的所有引用。在 sed 文件中也会出现同样的情况?
    • 最后一个问题,是否可以将此 bash(在 sh 文件中工作)转换为 awk 文件? awk '/\|\|\|\/' word.txt
    【解决方案2】:

    您的脚本是一个 shell 脚本,恰好包含一个 awk 命令。

    #! /bin/sh 告诉您的 shell 使用/bin/sh 将文件作为 shell 命令执行 - 它是一个 shell 命令。如果用#! /bin/awk -f替换,那么文件用awk执行,基本和执行一样

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 2021-07-10
      • 2019-08-13
      • 2013-08-17
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      相关资源
      最近更新 更多