shell 脚本中的多行 awk 脚本
multiline awk script inside shell script
#!/usr/bin/tcsh
cmd='BEGIN{c=0}{
if(=="Net"){print [=11=]}
if(=="v14")
{
if(>=200)
{print "Drop more than 200 at "}
}
}'
awk -f "$cmd" input_file.txt > output_file.txt
我正在尝试执行 shell 脚本,其中包含多行 awk 脚本。
将 awk 脚本(尤其是多行 awk 脚本)存储到变量 cmd & 然后在 awk -f "$cmd" input_file.txt > output_file.txt.
这给出了如下错误
awk: fatal: can't open source file `BEGIN{c=0}{
if(=="Net"){print [=12=]}
if(=="v14")
{
if(>=200)
{print"Drop more than 200 at }
}
}' for reading (No such file or directory)
我的问题是如何执行 shell 包含多行 awk 脚本的脚本?
你能帮我解决这个问题吗,因为即使在 google/reference 手册中搜索后我也无法弄清楚?
当你想传递一个文件名让脚本执行时,你使用awk -f
。
此处您的 awk
脚本是一个内联字符串,因此只需删除 -f
选项即可解决您的问题。
awk "$cmd" input_file.txt > output_file.txt
这是等效的脚本
=="Net"
=="v14" && >=200 {print "Drop more than 200 at "}
保存到文件中,例如 test.awk
和 运行 as
$ awk -f test.awk input_file > output_file
或者,对于简单的一次性脚本,您可以
$ awk '=="Net"; =="v14" && >=200 {print "Drop more than 200 at "}' input_file > output_file
显然上面的行也可以插入到 shell 脚本中。
- 不要编写 [t]csh 脚本,查看 https://www.google.com/search?q=csh+why+not 的许多结果中的任何一个,使用像 bash.
这样的 Bourne 派生的 shell
- 不要将 awk 脚本存储在 shell 变量中,然后让 awk 解释该变量的内容,只需将脚本存储在函数中并调用它。
所以,做这样的事情:
#!/usr/bin/env bash
foo() {
awk '
{ print "whatever", [=10=] }
' "${@:--}"
}
foo input_file.txt > output_file.txt
#!/usr/bin/tcsh
cmd='BEGIN{c=0}{
if(=="Net"){print [=11=]}
if(=="v14")
{
if(>=200)
{print "Drop more than 200 at "}
}
}'
awk -f "$cmd" input_file.txt > output_file.txt
我正在尝试执行 shell 脚本,其中包含多行 awk 脚本。 将 awk 脚本(尤其是多行 awk 脚本)存储到变量 cmd & 然后在 awk -f "$cmd" input_file.txt > output_file.txt.
这给出了如下错误
awk: fatal: can't open source file `BEGIN{c=0}{
if(=="Net"){print [=12=]}
if(=="v14")
{
if(>=200)
{print"Drop more than 200 at }
}
}' for reading (No such file or directory)
我的问题是如何执行 shell 包含多行 awk 脚本的脚本? 你能帮我解决这个问题吗,因为即使在 google/reference 手册中搜索后我也无法弄清楚?
当你想传递一个文件名让脚本执行时,你使用awk -f
。
此处您的 awk
脚本是一个内联字符串,因此只需删除 -f
选项即可解决您的问题。
awk "$cmd" input_file.txt > output_file.txt
这是等效的脚本
=="Net"
=="v14" && >=200 {print "Drop more than 200 at "}
保存到文件中,例如 test.awk
和 运行 as
$ awk -f test.awk input_file > output_file
或者,对于简单的一次性脚本,您可以
$ awk '=="Net"; =="v14" && >=200 {print "Drop more than 200 at "}' input_file > output_file
显然上面的行也可以插入到 shell 脚本中。
- 不要编写 [t]csh 脚本,查看 https://www.google.com/search?q=csh+why+not 的许多结果中的任何一个,使用像 bash. 这样的 Bourne 派生的 shell
- 不要将 awk 脚本存储在 shell 变量中,然后让 awk 解释该变量的内容,只需将脚本存储在函数中并调用它。
所以,做这样的事情:
#!/usr/bin/env bash
foo() {
awk '
{ print "whatever", [=10=] }
' "${@:--}"
}
foo input_file.txt > output_file.txt