Nota:
- A leitura de linhas individuais a partir de um arquivo e a execução de vários programas em cada linha várias vezes será extremamente lentas.
- Veja acima para cada vez que você faz
echo $line | ...
.
A maior parte disso pode ser feita pelo próprio awk:
awk -v fmt1='%s "[;][)]" "; fwsam: src, 1 hour;)"; # %s\n' -v fmt2='%s "\(msg:"" "(msg:"[SNORTSAM] "; # %s\n' '/ET CINS Active Threat Intelligence Poor Reputation/ {
rname = gensub(/.*(ET CINS Active Threat Intelligence Poor Reputation [^"]*).*/, "\1", 1)
rsid = gensub(/.*ET CINS Active Threat Intelligence Poor Reputation.*sid:(.*); .*/, "\1", 1)
printf fmt1, rsid, rname
printf fmt2, rsid, rname
}' input-file
Notas:
- Em vez de fazer um escape complexo para obter um formato de saída específico, use
printf
com uma string de formato. Eu usei duas variáveis awk definidas externamente (-v fmt1=...
,-v fmt2=...
) como as strings de formato, evitando assim muitas citações. - Você usou
echo ... | grep ... | awk
para imprimir somente se o padrãogrep
for correspondido. Isso é feito facilmente no próprio awk usando/pattern/ { action }
para executar ações apenas nas linhas que correspondem ao padrão. - O trabalho dos comandos
rev | cut | rev | cut
esed ... | sed
é feito com bastante facilidade no regex, mantendo apenas o grupo de caracteres de que você precisa.