Suponho que alguns processos de controle não possam ser evitados. Eu posso pensar em diferentes abordagens. Um correspondente de padrão dinâmico (em vez de grep
), ao longo do núcleo de awk '$0 ~ pat'
, em que pat
será dinamicamente carregado (por exemplo, com um co-processo% GNUawk
). Ou uma solução de injeção de padrão primitivo, em que as diretivas padrão de alteração são inseridas no fluxo de dados para que o filtro awk
possa ajustar facilmente o padrão em tempo real, ao longo das linhas:
mkfifo cmdfifo # create once an asynchroneous communication channel
{ while read cmd < cmdfifo ; do printf "%s\n" "@$cmd" ; done &
heavy_process ;} |
awk '
/^@/ { pat = substr($0,2) ; next } # parse the injected pattern
pat !="" && $0 ~ pat # if pattern is set print matching lines
'
Para ativar ou alternar a pesquisa para um padrão específico que você usaria, por exemplo,
echo bar > cmdfifo
para ativar uma correspondência para "bar" e uma subsequente
echo foo > cmdfifo
mudará dinamicamente o padrão para "foo".