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
printfcom 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 ... | awkpara imprimir somente se o padrãogrepfor 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 | cutesed ... | sedé feito com bastante facilidade no regex, mantendo apenas o grupo de caracteres de que você precisa.