0
我工作的一個腳本(殼)女巫自定義日誌文件(500M〜2G)7場轉換爲製表符分隔的文件,然後導入到MongoDB的同時轉換時間很重要。日誌格式(輸入文件格式):轉換自定義日誌文件導入TSV(shell腳本)
date time src_ip dst_ip "user" "useragent" http_url
我試過下面AWK命令,但它需要太長時間了1GB的日誌文件(事件並聯)!還有另一種更快的方法嗎?
cat file.log | awk -vFPAT='([^ ]+)|(\"[^\"]+\")' -vOFS='[ \t]+' '{print $1"\t"$2"\t"$3"\t"$4"\t"$5"\t"$6"\t"$7}' > res.tsv
更新:輸入日誌樣品(定界符:多個空間/ \ S + /):
2017-03-01 12:23:02 192.168.1.5 204.79.197.200 "admin" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0" http://www.bing.com/
2017-03-01 12:23:05 192.168.1.12 13.82.28.61 "user1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0" http://www.msn.com/
2017-03-01 12:23:05 192.168.1.12 204.79.197.200 "user1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0" http://www.bing.com/
2017-03-01 12:23:06 192.168.1.24 172.227.89.22 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36" http://www.fifa.com/
輸出(製表符分隔):
2017-03-01\t12:23:02\t192.168.1.5\t204.79.197.200\t"admin"\t"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0"\thttp://www.bing.com/
2017-03-01\t12:23:05\t192.168.1.12\t13.82.28.61\t"user1"\t"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0"\thttp://www.msn.com/
2017-03-01\t12:23:05\t192.168.1.12\t204.79.197.200\t"user1"\t"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:54.0) Gecko/20100101 Firefox/54.0"\thttp://www.bing.com/
2017-03-01\t12:23:06\t192.168.1.24\t172.227.89.22\t"-"\t"Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36"\thttp://www.fifa.com/
只有用戶代理字段包含空格。
能否請您給輸入格式的一個具體的例子,什麼相應的輸出會是什麼樣子? –
@GregoryNisbet最終目的是要在MongoDB中導入此日誌,以便我猜我需要將它們轉換爲CSV或TSV進口。 – HBS
@EdMorton這些都是投入......我想將它們轉換爲製表符分隔的文件,這樣我就可以在數據庫中導入。 – HBS