Это не слишком сложно и показывает, насколько хорошо вы можете использовать AWK внутри сценария оболочки.
Секция BEGIN выполняется до того, как awk построчно обработает файл.
Секция END выполняется после того, как awk обработал весь входной файл.
Важно назначить мин и макс с первым номером, найденным в файле. Иначе:
а) мин будет всегда равен нулю, если в файле только цифры> 0
b) иметь допустимое число для max, даже если файл имеет только один номер / строку.
$ _ представляет фактическую строку, обрабатываемую AWK.
#! /bin/sh
# script.sh - awk script embedded into shell script
awk 'BEGIN {
count=0
} {
if (NR == 1) {
min=$_
max=$_
}
if ($_ < min) {
min=$_
}
if ($_ > max) {
max=$_
}
sum+=$_
count++
} END {
printf ("min=%d\n", min)
printf ("max=%d\n", max)
printf ("avg=%d\n", sum/count)
}'
Использование:
$ cat datafile
2
1
4
5
3
$ chmod +x script.sh
$ ./script.sh < datafile
min=1
max=5
avg=3