Extrai dados do arquivo de log

0

Estou tentando aprender a analisar arquivos usando os comandos e ferramentas do Linux. Estou sempre confuso sobre como aproveitar melhor o grep / awk / sed.

Aqui está um caso de uso específico.

Eu tenho um arquivo de log que contém as seguintes strings:

Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: SRV3 Socket IP: 192.168.2.6
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: TESTSRV4 Socket IP: 10.1.2.3
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: SRV1 Socket IP: 192.168.2.15
Config Server received a Connection Establishment with an invalid public key, closing connection. Agent Identifier: TESTSRV2 Socket IP: 10.1.2.4

Meu objetivo é extrair o nome do host que aparece após "Identificador do agente" e o endereço IP associado para cada linha e exportá-los para um arquivo txt. Qual seria a melhor maneira de fazer isso?

    
por Heisenberg 20.04.2017 / 20:25

2 respostas

0

sed abordagem:

sed -n 's/.* Agent Identifier: \(.*\) Socket IP: \(.*\)/ /p' inputfile > host_list.txt

host_list.txt conteúdo do arquivo ( cat host_list.txt ):

SRV3 192.168.2.6
TESTSRV4 10.1.2.3
SRV1 192.168.2.15
TESTSRV2 10.1.2.4
    
por 20.04.2017 / 22:11
1

Basta fazer isso:

$ cat file.log | awk '{ print $16, $19 }' 

E ele retornará uma lista como esta:

SRV3 192.168.2.6
TESTSRV4 10.1.2.3
SRV1 192.168.2.15
TESTSRV2 10.1.2.4

Você pode redirecionar a saída para qualquer lugar que desejar, por exemplo, apenas adicione:

> hosts.text

para enviar seus dados para um arquivo chamado hosts.txt

O texto acima irá invalidar (substituir) qualquer conteúdo no arquivo hosts.txt . Se você quiser anexar seus dados ao final do arquivo, use >> em vez de > .

    
por 20.04.2017 / 20:52