Если все, что вам действительно нужно, это найти 20 гласных в строке, то это просто:
awk '{x=tolower($0)} gsub(/[aeiou]/,"&",x)==20' file
или с помощью grep:
grep -Ei '^[^aeiou]*([aeiou][^aeiou]*){20}$' file
Чтобы найти слова (при условии, что каждый пробелотдельно) есть много опций, включая GNU awk:
awk -v RS='\\s+' -v IGNORECASE=1 'gsub(/[aeiou]/,"&")==20' file
или любой другой awk:
awk '{for (i=1;i<=NF;i++) {x=tolower($i); if (gsub(/[aeiou]/,"&",x)==20) print $i} }' file