将日志文件解析为多个唯一的日志文件

时间:2015-04-02 21:33:02

标签: linux bash grep centos6 cat

我有一个集中的日志文件,我试图将其解析为多个文件,以使其更易于管理。

该文件包含如下所示的行

2015-04-02 16:03:13 -0500       192.168.3.3: shell login for 'rancid' from 192.168.50.10 on tty1 succeeded
2015-04-02 16:03:20 -0500       192.168.3.8: shell login for 'rancid' from 192.168.50.10 on tty1 succeeded
2015-04-02 16:03:24 -0500       192.168.4.11: shell login for 'rancid' from 192.168.50.10 on tty1 succeeded
2015-04-02 16:03:33 -0500       192.168.4.7: shell login for 'rancid' from 192.168.50.10 on tty1 succeeded
2015-04-02 16:03:34 -0500       192.168.4.8: shell login for 'rancid' from 192.168.50.10 on tty1 succeeded
2015-04-02 16:03:46 -0500       192.168.5.10: shell login for 'rancid' from 192.168.50.10 on tty1 succeeded
2015-04-02 16:03:50 -0500       192.168.5.11: shell login for 'rancid' from 192.168.50.10 on tty1 succeeded

我想将日志文件拆分出来,以便所有与第一个ip地址相关的行都在同一个日志文件中,以便192.168.3.8拥有它自己的文件,192.168.4.11具有它自己的文件等

1 个答案:

答案 0 :(得分:0)

试试这个(但要注意你得到一些文件ip_xxx.xxx.xxx.xxx.log: - )

LOG=logfile_to_be_splitted
awk '{print $4}' ${LOG} | sort -u | while read ip; do 
  lfile=$(echo "$ip" | sed 's/\(.*\):/ip_\1.log/'); 
  grep "$ip" "$LOG" >$lfile; 
done

awk命令获取具有IP地址的列

sort -u使它们唯一(如果IP地址不在连续行中)

sed第4列的IP地址,以摆脱尾随的“:”

while循环中,IP从日志文件中被插入到相应的文件中