将日志文件解析为多个唯一的日志文件
Parsing log file into multiple unique log files
我有一个集中式日志文件,我正试图将其解析为多个文件以使其更易于管理。
该文件包含如下所示的行
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 有自己的文件等
试试这个(但请注意,您会得到一些文件 ip_xxx.xxx.xxx.xxx.log
:-)
LOG=logfile_to_be_splitted
awk '{print }' ${LOG} | sort -u | while read ip; do
lfile=$(echo "$ip" | sed 's/\(.*\):/ip_.log/');
grep "$ip" "$LOG" >$lfile;
done
awk
命令获取包含 IP 地址的列
sort -u
使它们唯一(如果 IP 地址不在连续的行中)
sed
第 4 列的 IP 地址去掉结尾的“:”
在 while
循环中,IP 从日志文件中提取到相应的文件中
我有一个集中式日志文件,我正试图将其解析为多个文件以使其更易于管理。
该文件包含如下所示的行
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 有自己的文件等
试试这个(但请注意,您会得到一些文件 ip_xxx.xxx.xxx.xxx.log
:-)
LOG=logfile_to_be_splitted
awk '{print }' ${LOG} | sort -u | while read ip; do
lfile=$(echo "$ip" | sed 's/\(.*\):/ip_.log/');
grep "$ip" "$LOG" >$lfile;
done
awk
命令获取包含 IP 地址的列
sort -u
使它们唯一(如果 IP 地址不在连续的行中)
sed
第 4 列的 IP 地址去掉结尾的“:”
在 while
循环中,IP 从日志文件中提取到相应的文件中