2015-04-02 154 views
-1

我有一個集中的日誌文件,我試圖將其解析爲多個文件,以使其更易於管理。將日誌文件解析爲多個唯一日誌文件

該文件包含這樣看

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 

線,我想了拆分日誌文件,以便partaining的第一個IP地址的所有線路都在相同的日誌文件,以便192.168.3.8有它自己的文件,192.168.4.11有它自己的文件等

+0

試試吧,然後告訴我們你嘗試過:) – spiffman 2015-04-02 21:36:37

+0

以及我目前可以想到的唯一的事情就是在對循環運行的grep一個ip數組地址...這將工作得很好,我想,但這是一個列表(陣列),我必須跟上。除非也許我可以使用字符33-46的數字進行通配符搜索,因爲地址從每行的字符33開始,並使用該地址作爲文件名 – Axis 2015-04-02 21:42:04

+0

如果您想使用shell腳本,'sed'或'awk'是很好的選擇。否則,你總是可以用python或其他語言在一個小程序中解析它(這就是我如何去做的,但僅僅因爲我對sed/awk沒有好處......)。 – spiffman 2015-04-02 21:50:05

回答

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地址被grepped出來的日誌文件到其相應的文件

+0

我正試圖通過cat access.log | awk {'print $ 4'} |排序| uniq但只是給了我所有在第4場重複或不。我會嘗試你的方式,看看會發生什麼......非常感謝! – Axis 2015-04-02 22:02:36

+0

完成這項工作,謝謝! – Axis 2015-04-02 22:11:10