Ваша проблема заключалась в том, что в вашем скрипте у вас было:
if ($1<a) a=$1 fi
и что final fi
не является частью синтаксиса awk, поэтому он рассматривается как переменная, поэтому a=$1 fi
является конкатенацией строк и поэтому вы являетесь TELLING awk, что a
содержит строку, а не число и, следовательно, сравнение строк вместо числовых в $1<a
.
Что более важно вообще, никогда не начинайте с какого-либо угадываемого значения для max / min, просто используйте первое значение, считанное как семя. Вот правильный способ написания скрипта:
$ cat tst.awk
BEGIN { min = max = "NaN" }
{
min = (NR==1 || $1<min ? $1 : min)
max = (NR==1 || $1>max ? $1 : max)
}
END { print min, max }
$ awk -f tst.awk file
4 12
$ awk -f tst.awk /dev/null
NaN NaN
$ a=( $( awk -f tst.awk file ) )
$ echo "${a[0]}"
4
$ echo "${a[1]}"
12
Если вам не нравится NaN
выберите то, что вы предпочитаете печатать, когда входной файл пуст.