Não tenho muita certeza do que você deseja analisar, pois ainda não vi o formato de entrada, mas, se você quiser apenas ler uma lista de IPs e imprimir no arquivo de saída correspondente, tente:
awk 'NR==FNR{a[$1]=NR; next} {
for(ip in a){
if($0~ip){
print >> "line_"a[ip]"_ip.txt"
}
}
}}' <(wget -O - "https://zeustracker.abuse.ch/blocklist.php?download=badips" 2>/dev/null |
grep -Ev "#|^ *$") http.log
Isso é um pouco complexo, então vamos dividi-lo:
-
wget -O - https://zeustracker.abuse.ch/blocklist.php?download=badips 2>/dev/null | grep -Ev "#|^ *$": isso fará o download da lista de IPs, removerá qualquer linha que contenha#ou esteja vazia e imprima na saída padrão. -
<(command): Isso é chamado de substituição de processo e é um truque que algumas conchas (bash, zsh e ksh, mas talvez outros também) têm o que permite tratar a saída de um processo como um arquivo de entrada para outro comando. - Portanto, o
awksnipet vê dois "arquivos", o primeiro é a saída do comandowgetcanalizado através degrepe o segundo é o arquivohttp.log. -
NR==FNR{a[$1]=NR; next}: NR é o número da linha de entrada atual eFNRé o mesmo, mas o arquivo atual . Os dois serão iguais apenas enquanto o primeiro arquivo estiver sendo lido. Isto irá, portanto, criar a matrizacujas chaves são os IPs e cujo valor é o número da linha atual. -
for(ip in a): iterar sobre a matriza, salvando cada uma de suas chaves (os IPs) comoip. -
if($0~ip){}: se essa linha ($0) corresponder a esseip. -
print >> "line_"a[ip]"_ip.txt": imprime a linha em um arquivo chamadoline_, o número da linha de entrada em que esse IP foi visto e_ip.txt. O>>garante que o arquivo seja anexado e não seja sobrescrito.