2017-03-26 3 views
2

私は管理者以外のユーザとしてawkスクリプトをubuntuに書き込もうとしています。 4つの終端ステートメントを引数に取ります。これらの変数は、私が作った関数に送られ、平均数を吐き出して出力します。ここで私のawkユーザ機能がbashスクリプトで動作していない

は私のスクリプトです:

#!/usr/bin/gawk -f 
BEGIN{ 
one = ARGV[1]; 
two = ARGV[2]; 
three = ARGV[3]; 
four = ARGV[4]; 

function average_funct(one, two, three, four) 
{ 
total = one + two; 
total = total + three; 
total = total + four; 
average = total/4; 
return average; 
} 

print("The average of these numbers is " average_funct(one, two, three, four)); 
} 

それを実行するために、私は、この使用されています:

./myaverage4 2 7 4 3 

このエラーメッセージにその結果を:誰が助けることができれば

gawk: ./myaverage4:9: function average_funct(one, two, three, four) 
gawk: ./myaverage4:9:^syntax error 
gawk: ./myaverage4:15: return average; 
gawk: ./myaverage4:15: ^`return' used outside function context 

を私は素晴らしいだろう問題を見つけ出す。

答えて

3

BEGINセクションまたは他のアクションブロック内で関数を宣言することはできません。すべてのアクションブロックの外に移動します。私はあなたではなく、より明白と任意の数の引数に適応より行った方法を、あなたのコードを書くためのいくつかの理由があると仮定し

function foo() { ... } 
BEGIN { foo() } 

function average_funct(arr, total, cnt) 
{ 
    for (cnt=1; cnt in arr; cnt++) { 
    total += arr[cnt] 
    } 
    return (--cnt ? total/cnt : 0) 
} 
BEGIN { 
    print "The average of these numbers is", average_funct(ARGV) 
} 
+1

私は、この特定のプログラムのための4つの引数を必要としますが私はあなたのバージョンがもっと好きです。また、私はGoogleとstackoverflowの検索の最後の数時間のあなたの答えに来ていない。私は機能を移動した直後に働いた!どうもありがとうございました。 – Josiah

+0

よろしくお願いいたします。すべてのawk情報の最良のソースはArnold RobbinsのEffective Awk Programming、第4版です。あなたが他の本を持っているなら、それを投げ捨ててください。そして、あなたがウェブサイトから学ぶことを試みているなら、それらのほとんどが完全なナンセンスでいっぱいではありません。ただ本を手に入れよう。 –

+1

私はそれを調べなければならないでしょう。もう一度ありがとうEd。 – Josiah

関連する問題