首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么AWK使用我的参数作为输入文件

为什么AWK使用我的参数作为输入文件
EN

Stack Overflow用户
提问于 2015-08-06 09:38:32
回答 3查看 194关注 0票数 0

我正在写一个awk脚本,让它为我解析一些东西。为了方便起见,我希望awk脚本可以在linux中执行。这是我的密码:

代码语言:javascript
复制
#!/usr/bin/awk -f 
BEGIN {
        FILENAME=ARGV[1]
        sub_name=ARGV[2]
        run=ARGV[3]
        count=0           
}

{ 
        if ($4 == "ARGV[2]" && $8 == ARGV[3])
        {
              print $15
              count=count+1
        }
}

END {
      print count
}

当我在linux中发布我的awk脚本时,例如:

./my_script 001.log type1 2

awk会说:

awk:./awk_script:23:致命:不能打开文件‘`type1 1’供读取(没有这样的文件或目录)

我只想让参数"type1“作为我的脚本中的一个变量,而不是用于解析的输入文件。我怎么能不让awk把它当作一个输入文件呢?

谢谢,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-06 15:09:50

不要使用shebang来执行awk脚本,因为它只会使事情复杂化:

代码语言:javascript
复制
/usr/bin/awk -v sub_name="$2" -v run="$3" '
{ 
        if ($4 == sub_name && $8 == run)
        {
              print $15
              count=count+1
        }
}

END {
      print count
}
' "$1"

请注意,您的脚本可以稍微清理一下:

代码语言:javascript
复制
/usr/bin/awk -v sub_name="$2" -v run="$3" '
($4 == sub_name) && ($8 == run) {
    print $15
    count++
}
END { print count+0 }
' "$1"
票数 4
EN

Stack Overflow用户

发布于 2015-08-06 09:44:42

从ARGV中删除非文件选项:

代码语言:javascript
复制
delete ARGV[2]
delete ARGV[3]
票数 2
EN

Stack Overflow用户

发布于 2015-08-06 09:48:49

如果要将它们用作变量,则必须使用-v参数。您试图这样做的方式,表明第二个参数是一个输入/输出文件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31852186

复制
相关文章

相似问题

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