用于查找最多 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或您想要的任何两个数字),输出将是两个数字中的最大值。我想我可以做以下事情。

#!/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

如果您不介意使用 Bash 而不是 AWK:

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

相关内容