最大4つの数字を見つけるカスタム関数

最大4つの数字を見つけるカスタム関数

カスタム関数を使用して2つの数字の最大値を見つけるための基本スクリプトがあり、4つの数字を受け入れるように変換する必要があります。ここにスクリプトがあります。

#!/bin/bash
echo $1 $2 | awk '
{
    print max($1, $2)
}

function max(a, b) {
    return a > b ? a: b
}'

単に以下を実行して実行できます。 (./scriptname 1 2または2つの希望の数値)出力は2つの数値のうち最大値になります。次のことができると思います。

#!/bin/bash
echo $1 $2 $3 $4 | awk '
{
    print max($1, $2, $3, $4)
}

function max(a, b, c, d) {
    return a < b ? a: b
}' 

「リターン」ワイヤであるワイヤ7に問題があります。どんな提案がありますか?
ありがとう -CableGuy

答え1

AWKの代わりにBashを使用しても大丈夫なら:

find_max() {
  local max number

  max="$1"

  for number in "${@:2}"; do
    if ((number > max)); then
      max="$number"
    fi
  done

  printf '%d\n' "$max"
}

使用法:

$ find_max 12 64 2 455 23 99
455

答え2

2つのパラメータ機能を使用できます。どんどん:

$ cat scriptname 
#!/bin/bash
echo $1 $2 $3 $4 | awk '

function min(a, b) {
    return a < b ? a: b
}

{
    print min(min(min($1,$2),$3),$4)
}'

例えば

$ ./scriptname 3 1.2 -0.4 77
-0.4

パラメータが4つの関数で記述する必要がある場合は、次のようなことを提案します。

function min(a, b) {
    return a < b ? a : b
}

function min4(a,b,c,d) {
    return min(min(min(a,b),c),d)
}

{
    print min4($1,$2,$3,$4)
}

答え3

このawkを試してみてください。

echo -3.89 -1.2 -0.217 -48 | awk '{a=$1;for(i=2;i<=NF;i++)a=$i>a?$i:a;print a}'

答え4

これデジタルユーティリティパック一般的な問題を解決するためのコンテンツが含まれていますnumbound(4つのパラメータに限定されません)。

printf "%s\n" 5 88.3 22 -22 -333 5 | numbound 

出力:

88.3

これは、コマンドライン引数を解析する単純な関数にすることができます。

max() { printf "%s\n" "$@" | numbound ; }

例:

max 55 33 2 99 22

出力:

99

関連情報