LINUX.ORG.RU
ФорумAdmin

Вопрос по скрипту. awk

 


0

1

Всем привет!

Тут такая ситуация...я подумал что лоролюди справятся с этим. (:

Есть файлы типа

  • 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

Спасибо!

★★★★★

Ответ на: комментарий от anonymous

запускаю, но ошибка...

ipeacocks@crunchbang:~$ ./parser-upd.sh
awk: {print $1, $2, $3 /home/ipeacocks/logs/vasya.com.log}
awk:                                                                  ^ syntax error
awk: {print $1, $2, $3 /home/ipeacocks/logs/petya.com.log}
awk:                                                                   ^ syntax error

Нужно как-то экранировать...

ipeacocks ★★★★★ ()
Ответ на: комментарий от anonymous

есть спец. переменная FILENAME

awk '{print $1, $2, $3, FILENAME}' file.txt

или

cat ... | awk -vf=$i '{print $1, $2, $3, f}'

sdio ★★★★★ ()
Ответ на: комментарий от ipeacocks

можно было grep-ом.
grep -lir «iskomoye_slovo» file1 file2 file3

dada ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.