Não há uma maneira portátil de testar se existe uma função no Awk. Se você está chamando o script Awk de um shell, você pode fazer chamadas Awk para testar a existência de funções primeiro.
if awk 'BEGIN {asort(a)}' <>/dev/null 2>/dev/null; then
define_asort=
else
define_asort='
function asort() { … }
'
fi
awk "$define_asort"'
… rest of script …
'
Se você está apenas tentando distinguir o GNU Awk dos outros, você pode testar algum outro recurso do GNU Awk. Chamar funções indefinidas causa um erro fatal no Awk, mas usar uma variável indefinida é sempre bom e retorna um valor vazio. Você pode usar, em particular, PROCINFO[version]
, que desde o Gawk 3.1.4 contém o número da versão do Gawk.
function my_sort(a) { … }
function sort_wrapper(a) { if (PROCINFO["version"]) asort(a); else my_sort(a); }