Text-Processing
從日誌文件中提取數據
我正在嘗試學習如何使用 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文件中的任何內容。如果要將數據附加到文件末尾,請
>>
使用>
.