Всем привет!
Тут такая ситуация...я подумал что лоролюди справятся с этим. (:
Есть файлы типа
- vasya.com.log
- petya.com.log
- privet.com.log
Это логи нджинкса, т.е. там строки типа:
108.13.23.247 [10/Apr/2012:11:50:40 -0500] - kuq47ecji1cda9bmutrepgvu23 "POST /index.php/admin/bla=true HTTP/1.1" 200 25 "https://google.com/index.php/admin/a4c53f7a1924270f2c584/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11"
На выходе нужно получить файл чтобы в нем присутствовала информация:
IP - timestamp - domain
И вот я использую скрипт типа:
#!/bin/sh
#need IP - timestamp - url
FILE=/home/ipeacocks/output.txt
DIR=/home/ipeacocks/logs
#cleaning file
:>$FILE
#head of document
echo "IP_from"'\t''\t''\t' "Time"'\t''\t''\t' "Domain" '\n'\
----------------------------------------------------------------------------->> $FILE
for i in `find $DIR -type f`
do
#parsing only with status 200 remove grep if you want to parse all requests
grep '"GET /customer/account/index/ HTTP/1.1" 200' $i | awk '{print $1, $2, $3}' $i >> $FILE
echo "Processing $i"
done
#remove useless data
sed -i 's/\"https:\/\///g' $FILE
sed -i 's/\"http:\/\///g' $FILE
sed -i 's/"//g' $FILE
собственно получаю типа такого:
180.76.5.63 [10/Apr/2012:08:12:41 -0500]
Как добавить в конец каждой строки имя файла который обрабатывается? Т.е. хотелось бы получить:
180.76.6.63 [10/Apr/2012:08:12:41 -0500] vasya.com.log
.....
180.76.6.63 [10/Apr/2012:08:12:41 -0500] petya.com.log
Спасибо!