入力した4つの数字を追加するスクリプトを作成しました。例:
./myawkaverage 8 7 9 4
28
この4つの数字を追加し、結果が次のように平均を表示するには、スクリプトが必要です。
例:
./myawkaverage 8 7 9 4
The average is 7
負の数を許可するスクリプトも必要です。
これまで私のスクリプトは次のようになりました。
#!/bin/bash
echo $1 $2 $3 $4 | awk '
{
print sum3($1, $2, $3, $4)
}
function sum3(a, b, c, d) {
return (a + b + c + d)
}'
答え1
エラーを確認し、カスタムawk
関数を使用せずに、次のようにスクリプトを簡素化できます。
#!/bin/bash
echo $1 $2 $3 $4 | awk '{sum=0; for(i=1; i<=NF; i++) sum += $i; print sum}'
または、常に数値を出力する必要がない場合(0でも):
#!/bin/bash
echo $1 $2 $3 $4 | awk '{for(i=1; i<=NF; i++) sum += $i; print sum}'
答え2
合計関数の命名4数字の合計サム「スクリプト名を指定するなど、興味深い選択肢です。和集合番号「myawk平均":-). それでも...:
$ cat myawkaverage
#!/usr/bin/env bash
printf '%s\n' "$@" | awk '{sum+=$0} END{print sum}'
$ ./myawkaverage 8 7 9 4
28
$ ./myawkaverage 1 2 3 4 5 6 7 8 9 10 11
66
実際に平均を取得するスクリプトを作成する場合は、次のようにします。
$ cat ./myawkaverage
#!/usr/bin/env bash
printf '%s\n' "$@" |
awk -v n="$#" '{sum+=$0} END{ave=(n ? sum / n : "NaN"); print sum, ave}'
$ ./myawkaverage 8 7 9 4
28 7
$ ./myawkaverage 1 2 3 4 5 6 7 8 9 10 11
66 6
$ ./myawkaverage 0
0 0
$ ./myawkaverage
0 NaN