我的程序遇到了问题。我正在使用awk,我正在尝试调用它中的函数。
function dots()
{
for ((i= 0 ; i < $1; i++)); do
echo "."
done
}
awk '{k=$1; sub(/[^ ]+ /,"__",$0); $1=$1; print $0 "\t:", (dots k) }'
然后我尝试调用该函数并传递k
作为第一个参数(k
是一个数字)。有没有办法在awk中调用函数?
答案 0 :(得分:6)
你无法从awk调用shell函数。 你必须编写一个等效的awk函数,例如将此添加到您的awk脚本:
function dots(n) {while(n-- > 0) print "."}
答案 1 :(得分:1)
使用awk高效创建n个点的字符串的方法是
function dots(n) { return gensub(/ /,".","g",sprintf("%*s",n,"")) }
以上使用GNU awk for gensub(),其他awks你可以使用变量和gsub():
function dots(n, x) { x=sprintf("%*s",n,""); gsub(/ /,".",x); return x }
如果您确实在每.
后确实需要换行符,请将/ /,"."
更改为/ /,".\n"
。
答案 2 :(得分:0)
我也遇到了类似的问题,通过编写 awk 函数解决了这个问题。 我们不能只从 awk 调用 shell 函数。我们需要在 awk 命令中编写 awk 函数,如下所示:
awk '
function dots()
{
for ((i= 0 ; i < $1; i++)); do
echo "."
done
}
{k=$1; sub(/[^ ]+ /,"__",$0); $1=$1; print $0 "\t:", (dots k) }'