Без бесполезного cat
или бесполезного sort
и с исправленной ошибкой
awk '!($1 in min) || $2<min[$1] { min[$1] = $2 }
END { for (i in min) print i,min[i] }' aaa.txt
Ошибка в том, что неинициализированные элементы массива по умолчанию обнуляются, поэтому вы теряли те, у которых был положительный минимум.
Я сложил это для разборчивости; при желании вы можете удалить встроенный перевод строки.
Если важно сохранить порядок, вы можете добавить второй массив, который отслеживает порядок появления ключей.
awk '!($1 in min) { k[++i] = $1; min[$1] = $2}
$2<min[$1] { min[$1] = $2 }
END { for (j=1; j<=i; ++j) print k[j],min[k[j]] }' aaa.txt