[英]Declaring an awk function in bash
我有一个awk脚本,它被调用:
awk -f myawkfile.awk arguments
使用相同的提到的调用将awk脚本调用到我的bash脚本中。
我可以而不是调用awk脚本将其声明为我的bash脚本中的函数。 我认为通过在前面和后面写一个awk
来勾选整个代码然后分配一个函数名来随意调用它会很容易。 不知怎的,它没有做到这一点。
我试图这样做是因为我不希望我的脚本依赖于另一个脚本。 我不是那个写awk
脚本的人。 它需要一个文件作为输入,做一些东西并返回我脚本中使用的修改过的文件。
使用heredoc表示法可以写出这样的东西
#!/bin/bash
awk_program=$(cat << 'EOF'
/* your awk script goes here */
EOF
)
# ...
# run awk script
awk "$awk_program" arguments
# ...
只需在函数中编写awk脚本:
#!/bin/sh -e
foo() { awk '{print $2}' "$@"; }
foo a b # Print the 2nd column from files a and b
printf 'a b c\nd e f\n' | foo # print 'b\ne\n'
请注意,如果将空字符串作为参数传递,则awk标准在行为上似乎不明确,但shell保证"$@"
扩展为零字段而不是空字符串,因此如果您使用以下方法调用foo
,则只会出现问题空论点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.