Em primeiro lugar, não há sentido em awk '{print $0}' , que apenas imprime cada linha de entrada. Use whod=$(whois "$domain") em vez disso. De qualquer forma, o seu principal problema é que você não está citando suas variáveis. Isso causa todos os tipos de problemas, o mais importante é que quando você echo $whod , o que você obtém é uma única linha com todos os dados. Portanto, seu awk '{print $3}' está sendo aplicado a esta linha (em curto para maior clareza):
Whois Server Version 2.0 Domain names in the .com and .net [ ... ]
E a terceira palavra é Version , que, presumivelmente, é o que você recebe. Você também está usando arrays ( expdate=( $( echo $whod ... ) ) ) e não entendo o porquê. Pode haver várias correspondências? De qualquer forma, uma versão funcional do seu script é:
while IFS="," read domain rdate; do
whod="$(whois "$domain")"
cdate="$(echo "$whod" | grep -m 1 -i Creation| awk -F" " '{print $3}')"
expdate="$(echo "$whod" |grep -m 1 -i 'Expiration Date' | awk -F" " '{print $3}')"
printf "$domain,$cdate,$expdate \n"
done < "temp1.txt"