Text-Processing

從日誌文件中提取數據

  • April 20, 2017

我正在嘗試學習如何使用 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 文件。最好的方法是什麼?

sed方法:

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

host_list.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

只需這樣做:

$ 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

將數據輸出到名為hosts.txt的文件中

以上將破壞(替換)hosts.txt文件中的任何內容。如果要將數據附加到文件末尾,請>>使用>.

引用自:https://unix.stackexchange.com/questions/360271