在awk中调用函数

时间:2017-03-26 10:31:38

标签: bash awk

我的程序遇到了问题。我正在使用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中调用函数?

3 个答案:

答案 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) }'