2015-02-26 2 views
1

Мой код 1:Определяется пользователем проблема функции в AWK

awk -F'|' -v PARM_VAL="${PARM_VALUE[*]}" ' 
BEGIN { split(PARM_VAL,pa," ") 
fn_1() 
{ 
print "inside fn" 
} 
} 
FNR==NR{ for(i=1;i<=NF;i++) a[NR,i]=$i; } 

{if (FILENAME == "SPP_OUT") {print $1}} 
fn_1 
END {printf " second value of SPPIN : "a[2,2]} ' SPP_IN SPP_OUT 

Я получаю ошибку фатальный: функция `fn_1' не определено

Мой код 2:

awk -F'|' -v PARM_VAL="${PARM_VALUE[*]}" ' 
BEGIN { split(PARM_VAL,pa," ") 
fn_1() 
{ 
ret = "returned" 
return ret 
} 
} 
FNR==NR{ for(i=1;i<=NF;i++) a[NR,i]=$i; } 

{if (FILENAME == "SPP_OUT") {print $1}} 
m=fn_1() 
END {printf " second value of SPPIN : "a[2,2];print $m} ' SPP_IN SPP_OUT 

I am лицевая сторона awk: cmd. line: 6: return ret awk: cmd. line: 6:^`return 'используется вне контекста функции

Может ли какой-нибудь asssist? Благодаря

+0

Это не дубликат http://stackoverflow.com/questions/28735013/display-input-file-without-print-in-awk? – candymanuu

+0

Попробуйте определить функцию перед оператором BEGIN как «awk -F» | -v PARM_VAL = "$ {PARM_VALUE [*]}" ' fn_1() { печати "внутри Fn" } BEGIN {раскол (PARM_VAL, ра,»«);} FNR == NR {для (i = 1; i <= NF; i ++) a [NR, i] = $ i;} {if (FILENAME == "SPP_OUT") {print $ 1}} fn_1 END {printf "второе значение SPPIN: «a [2,2]}« SPP_IN SPP_OUT » –

+0

@ candymanuu Эта проблема связана с функцией – Madan

ответ

2

Чтобы получить ядро ​​кода рабочего я должен был добавить function ключевое слово при определении функции, и круглые скобки при выполнении вызова следующим образом:

$ cat foo.awk 
BEGIN { print "begin" } 

function fn_1() 
{ 
    print "inside fn" 
} 

{ 
    fn_1() 
} 

END { print "end" } 

$ echo 'xyz' | awk -f foo.awk 
begin 
inside fn 
end 

Из инструкции AWK:

определение функции с именем имя выглядит следующим образом:

функция имени (пункт метр-лист)
{
тело-функции
}

2

Функция должна быть определена из BEGIN блока. Например:

$ cat function.awk 
function fib(n, n_1, n_2) 
{ 
    if (n < 2) { 
     return n 
    } else { 
     n_1 = fib(n - 1) 
     n_2 = fib(n - 2) 
     return n_1 + n_2 
    } 
} 

BEGIN { 
    for (i = 0; i < 5; ++i) { 
     printf("fib(%d) = %d\n", i, fib(i)); 
    } 
} 
$ awk -f function.awk 
fib(0) = 0 
fib(1) = 1 
fib(2) = 1 
fib(3) = 2 
fib(4) = 3 
$ 

Определенная пользователем awk Синтаксис функции

function NAME(PARAMETER-LIST) 
{ 
    BODY-OF-FUNCTION 
} 

Хитрая часть:

ПАРАМЕТР-LIST список аргументов функции и локальных переменных имена, через запятую. Когда функция вызывается, имена аргументов используются для хранения значений аргументов, указанных в вызове. Локальные переменные инициализируются пустой строкой. Функция не может иметь два параметра с одинаковым именем и не может иметь параметр с тем же именем, что и сама функция.

Для получения более подробной информации см. awk manual.

Смежные вопросы