使用shell中的awk脚本搜索文本文件

时间:2014-01-23 09:35:45

标签: unix awk gawk

所以有我的问题,我认为这是一个非常微不足道的问题,但我不能为我的生活找到解决方案。

我想学习使用awk来操作文本文件。我知道python并且可以使用它来达到这种效果但是我的主管告诉我我要使用Awk。

我正在家里试验cygwin,但最后我将使用UNIX

我的问题是基本的Awk语法。我想在文本文件中编写我的awk脚本,并通过以下方式从命令行调用它。

./scirptname filename

当我使用一个非常简单的Helloworld脚本时,没有问题 现在我想尝试搜索包含a关键字的行 我的脚本看起来像这样

#! /bin/awk

BEGIN {

}
{
    '/keyword/ {print}'
}

当我尝试在文件上运行时,知道包含此关键字我收到以下错误消息

gawk: cmd. line:1: ./test1
gawk: cmd. line:1: ^ syntax error
gawk: cmd. line:1: ./test1
gawk: cmd. line:1:   ^ unterminated regexp

再一次,很抱歉打扰这个非常简单而琐碎的问题,但是如何将文件名提供给我的脚本并让我的脚本执行我希望它在该文件上执行的任务。
我不想用shell制作一个内衬,我想对这些文件做的事情有点过于复杂(在我无知的未受过教育的意见中)。
我真的很感激帮助。

1 个答案:

答案 0 :(得分:1)

问题一:

您并不理解awk的模式操作。谷歌一些教程并阅读该部分。

喜欢:http://www.chemie.fu-berlin.de/chemnet/use/info/gawk/gawk_9.html

在你的awk文件中,你应该有:

#! /bin/awk -f
BEGIN {} {if(/keyword/) {print}}

#! /bin/awk -f
BEGIN {} /keyword/ {print}

实际上,上述行可以缩短为(假设您需要BEGIN块):

#!/bin/awk -f
BEGIN {} /keyword/

问题二:

hashbang行需要-f所以:

#!/bin/awk -f

然后你可以在同一个目录下,做:

./myawk.awk inputfile