O problema é parte de entrada, (para ler o arquivo de entrada do disco apenas uma vez) e processamento da peça (para percorrer o arquivo apenas uma vez).
Como grep
só pode produzir em um fluxo, a parte de iteração do trabalho não pode ser feita com apenas uma instância de grep
.
A parte de entrada do trabalho pode ser melhorada:
tee >(grep -F -f regexp_file >./positive_match) < input_file | \
grep -F -f regexp_file -v >./negative_match
Usando tee
e bash
's Substituto de Processo , o input_file
só precisa ser lido do disco uma vez. O pee
command pode fazer o mesmo:
pee 'grep -F -f regexp_file >./positive_match' \
'grep -F -f regexp_file -v >./negative_match' < input_file