Eu faria isso em Perl. Salve o e-mail e o nome de usuário associado do /etc/dovecot/dovecot.passwd em um hash e substitua em /etc/mail/virtusertable :
$ perl -i -ape 'BEGIN{
open($fh,"/etc/dovecot/dovecot.passwd");
while(<$fh>){ @G=split(/:/); $k{$G[0]}=$G[2]; }
}
s/error:nouser Account temporary disabled/$k{$F[0]}/ if defined $k{$F[0]};
' /etc/mail/virtusertable > newfile
Explicação
O -i faz o perl editar seu arquivo de entrada, o mesmo que sed -i . O -a faz com que ele divida cada linha de entrada no espaço em branco na matriz @F . Apenas como awk . O -p significa "imprimir todas as linhas depois de aplicar o script fornecido por -e ".
O próprio script lê /etc/dovecot/dovecot.passwd no bloco BEGIN{} (antes de ler o arquivo de entrada, /etc/mail/virtusertable ), divide cada linha em : na matriz @G e salva cada email como uma chave no hash %k cujos valores são os nomes de usuários.
Quando terminar, ele processará /etc/mail/virtusertable e substituirá cada error:nouser Account temporary disabled pelo nome de usuário correspondente ao email no 1º campo se esse nome de usuário for definido.