awkpode executar awkfunções. Para executar bashfunções, você precisa awkexecutar um bashshell que bashinterprete a definição dessa função e chame essa função, com o valor extraído por awkpassado como argumentos.
Não é trivial.
bashsuporta funções de exportação, para que esteja disponível em chamadas subsequentes de bash, portanto, é uma maneira de passar a definição da função para a bashchamada por awk:
export -f d2h
As únicas maneiras de awkexecutar um comando ( bashaqui) são com system("cmd"), ou print... | "cmd"ou "cmd" | getline. Em todos os casos, awkexecuta um shell para interpretar isso cmd, mas será sh, não bash. Portanto, você precisa construir uma linha de comando, pois shessa é uma bashchamada que interpreta uma bashlinha de comando para chamar a função; portanto, você deve ter cuidado ao citar:
export -f d2h
<file awk -v q="'" '
function shquote(s) {
gsub(q, q "\\" q q, s)
return q s q
}
{print $1; system("bash -c '\''d2h \"$1\"'\'' bash " shquote($2))}'
Isso significa executar um she um bashpara cada linha, por isso será bastante ineficiente. Isso acabaria sendo ainda mais ineficiente do que bashfazer a leitura e a divisão com um while read loop:
(unset IFS; while read -r a b rest; do
printf '%s\n' "$a"
d2h "$b"
done < file)
d2hfosse um executável, mas não se for uma "função definida no .bashrc ou no shell script".