首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk脚本标题:#!/bin/bash或#!/bin/awk -f?

awk脚本标题:#!/bin/bash或#!/bin/awk -f?
EN

Stack Overflow用户
提问于 2011-01-12 23:08:00
回答 2查看 10.7K关注 0票数 4

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

我问这个问题的原因是,如果我在控制台中尝试这个命令,我会收到正确的file.txt和"line of text":

代码语言:javascript
复制
 awk 'BEGIN {print "line of text"}' >> file.txt

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

代码语言:javascript
复制
#! /bin/awk -f
awk 'BEGIN {print "line of text"}' >> file.txt

它返回一个错误:

代码语言:javascript
复制
$ ./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,则可以正常工作。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-12 23:12:13

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

awk -f接受一个包含awk脚本的文件,所以这在这里是完全错误的。

票数 7
EN

Stack Overflow用户

发布于 2011-01-12 23:10:51

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

#! /bin/sh告诉您的外壳程序使用/bin/sh将文件作为外壳命令执行--这是一个外壳命令。如果将其替换为#! /bin/awk -f,则使用awk执行该文件,基本上与执行

代码语言:javascript
复制
/bin/awk -f awk 'BEGIN {print "line of text"}' >> file.txt 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4670286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档