我需要解析一个日志文件,以便以下条目是这样的:
Jul 23 17:38:06 192.168.1.100 638 "this message will always be the same"
Jul 23 17:56:11 192.168.1.100 648 "this message will always be the same."
Jul 23 18:14:17 192.168.1.101 "this message will always be the same."
Jul 23 18:58:17 192.168.1.101 "this message will always be the same."
Run Code Online (Sandbox Code Playgroud)
看起来像这样:
Jul 23 17:56:11 192.168.1.100 648 "this message will always be the same."
Jul 23 18:58:17 192.168.1.101 "this message will always be the same."
Run Code Online (Sandbox Code Playgroud)
基本上我正在做的是获取一个具有重复 IP 地址但具有不同时间戳的文件,并找到每个 IP 地址的最后一次出现(或最近一次出现),并将其打印到屏幕上或将其定向到另一个文件中。
我尝试过的:
我写了一个 bash 脚本,我认为它可以让我这样做,但它不起作用。
#!/bin/bash
/bin/grep 'common pattern to all lines' /var/log/file | awk '{print $4}' | sort - u > /home/user/iplist
while IFS='' read -r line || [[ -n "$line" ]]; do
echo "$line"
done < "/home/user/iplist"
awk '/'$line'/ {a=$0}END{print a} ' /var/log/logfile
Run Code Online (Sandbox Code Playgroud)
该脚本运行并输出每个 IP 地址,但它不会打印除最后一行之外的整行。
前任..
192.168.100.101
192.168.100.102
192.168.100.103
Jul 23 20:20:55 192.168.100.104 "this message will always be the same."
Run Code Online (Sandbox Code Playgroud)
脚本中的第一个命令获取 IP 的所有唯一出现并将其发送到文件。while 循环为每一行分配一个“$line”变量,然后将其传递给 awk,我认为它会获取每个 IP,然后搜索实际文件并打印出每个文件的最后一次出现。我怎样才能让这个工作,无论是使用脚本还是 awk one liner?
$ tac file | awk '!seen[$4]++' | tac
Jul 23 17:56:11 192.168.1.100 648 "this message will always be the same."
Jul 23 18:58:17 192.168.1.101 "this message will always be the same."
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
256 次 |
| 最近记录: |