É difícil depurar um trecho de código sem saber quais dados são inseridos nele. Portanto, abster-me-ei de especular sobre o que poderia estar errado com seu código, além de dizer que ^$ACCT provavelmente deveria ser duplicado, assim como todas as outras ocorrências de $ACCT .
Em vez de chamar zgrep uma vez para cada linha em account_list.txt (descompactar esses arquivos de dados quantas vezes houver linhas nesse arquivo), leia as contas em uma matriz em awk e faça o processamento em um passagem única:
awk 'NR==FNR { acct[$1]; next }
$1 in acct { file="/tmp/" $1 ".txt"; print >>file; close(file) }' \
account_list.txt <( zcat datafile.0[2-3]2015.gz )
Isso pressupõe bash ou algum outro shell que entende as substituições do processo. Também presume que a lista de contas contém o nome da conta na primeira coluna e que os arquivos de dados também contêm o nome da conta na primeira coluna (você não mostrou realmente como são esses arquivos, por isso não posso dizer se isso funcionaria ou não).
O primeiro bloco awk é executado apenas para o primeiro arquivo, account_list.txt , e criará uma matriz associativa, acct , com os nomes das contas para extrair como chaves.
O segundo bloco é executado somente sobre as linhas dos arquivos de dados extraídos, e se o primeiro campo corresponde a uma chave em acct , então essa linha é impressa em um arquivo apropriadamente nomeado.