É 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.