用户定义的 awk 函数不起作用

用户定义的 awk 函数不起作用

我已经解决了 Project Euler Problem 3,但问题是我无法在 awk 中创建该函数。

我已经尝试过这个工作代码(没有功能):

#!/usr/bin/awk -f
BEGIN{
    n=600851475143;
    x=2; # minimal prime
    while ( x<n ) {
        if ( (n%x) == 0 ) {
            n = n/x
            print n
        } else { # if n not divisible then increment x+1
            x++
        }
    }
}

不工作功能

#!/usr/bin/awk -f
# The prime factors of 13195 are 5, 7, 13 and 29.
# What is the largest prime factor of the number 600851475143 ?

function get.PrimeFactor(n) {
    x=2; # minimal prime
    while ( x<n ) {
        if ( (n%x) == 0 ) {
            n = n/x
            print n
        }
        else { # if n not divisible then increment x+1
            x++
        }
    }

BEGIN {
    n = $1 # input number by user
    get.PrimeFactor(n)
}

我尝试了多种方法来使用该函数,但没有成功。

谁能强调我做错了什么?

答案1

去掉那个点。有效的 awk 函数名称由一系列字母、数字和下划线组成,并且不以数字开头。

答案2

使用函数运行 AWK 脚本。

#!/usr/bin/awk -f
# The prime factors of 13195 are 5, 7, 13 and 29.
# What is the largest prime factor of the number 600851475143 ?

function get_PrimeFactor(n) {
    x=2; # minimal prime
    while ( x<n ) {
        if ( (n%x) == 0 ) {
            n = n/x
        }
        else { # if n not divisible then increment x+1
            x++
        }
    }
    return n
}

BEGIN {
    n = ARGV[1] # input number by user
    print get_PrimeFactor(n)
}

相关内容