从日志文件中提取数据

从日志文件中提取数据

我正在尝试学习如何使用 Linux 命令和工具解析文件。我总是对如何最好地利用 grep/awk/sed 感到困惑。

这是一个具体的用例。

我有一个包含以下字符串的日志文件:

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

我的目标是提取出现在“代理标识符”之后的主机名以及每行关联的 IP 地址,并将它们导出到 txt 文件。最好的解决办法是什么?

答案1

只需这样做:

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

它会返回一个像这样的列表:

SRV3 192.168.2.6
TESTSRV4 10.1.2.3
SRV1 192.168.2.15
TESTSRV2 10.1.2.4

您可以将输出重定向到任何您喜欢的位置,例如,只需添加:

> hosts.text

将数据输出到名为的文件主机.txt

上述内容将破坏(替换)中的任何内容主机.txt文件。如果您想将数据附加到文件末尾,请>>使用>.

答案2

sed方法:

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

主机列表.txt文件内容( cat host_list.txt):

SRV3 192.168.2.6
TESTSRV4 10.1.2.3
SRV1 192.168.2.15
TESTSRV2 10.1.2.4

相关内容