사용자 정의 함수를 사용하여 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
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