#!/usr/bin/tcsh
cmd='BEGIN{c=0}{
if($1=="Net"){print $0}
if($1=="v14")
{
if($4>=200)
{print "Drop more than 200 at "$1}
}
}'
awk -f "$cmd" input_file.txt > output_file.txt
我正在尝试执行shell脚本,其中包含多行awk脚本。存储awk脚本(特别是多行awk脚本)到一个变量cmd&然后在awk中执行该cmd-f“$cmd”input_file.txt〉output_file.txt。
这将产生如下错误
awk: fatal: can't open source file `BEGIN{c=0}{
if($1=="Net"){print $0}
if($1=="v14")
{
if($4>=200)
{print"Drop more than 200 at $1}
}
}' for reading (No such file or directory)
我的问题是我如何执行shell脚本,其中包含多行awk脚本里面?你能帮我这个,因为我不能figureout即使在谷歌搜索/参考手册?
4条答案
按热度按时间nafvub8i1#
当您想要传递文件名称给要执行的指令码时,请使用
awk -f
。在这里,您的
awk
脚本是一个内联字符串,因此只需删除-f
选项即可解决您的问题。ufj5ltwl2#
1.不要编写[t]csh脚本,查看https://www.google.com/search?q=csh+why+not的任何结果,使用Bourne派生的shell(如bash)。
1.不要将awk脚本存储在shell变量中,然后让awk解释该变量的内容,只需将脚本存储在函数中并调用该函数即可。
因此,请执行以下操作:
1tuwyuhd3#
这是等效的脚本
保存到一个文件中,例如
test.awk
,并运行为或者,对于简单的一次性脚本,您可以只
显然,上面的代码行也可以插入到shell脚本中。
ss2ws0br4#
在tcsh中不知道,但在bash中也可以使用heredoc: