Страница 1 из 1
подскажите как это можно реализовать
Добавлено: 2009-07-24 22:19:09
Funt1k
есть много много логов (примерно 1.5 гига) по свой структуре похожи на апачевские.
в первом столбце идет ип с которого заходили и потом куда, надо их перелопатить так, чтобы все ипы превратились в 1 нужный ип
реализовал 1 командой
Код: Выделить всё
cat access.log | awk '{print "10.0.0.1 " $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9}' > access.log.txt
вот тока файликов access примерно тысяча и все они идут с датой access.log.20090701 access.log.20090702 и так далее
вот как бы в шеле все это перетряхнуть что бы все они стали с нужным мне ипом?
у кого какие идеи есть?
Re: подскажите как это можно реализовать
Добавлено: 2009-07-24 22:30:15
paradox
что то я старею
а обьясните мне и покажите пример что делает эта комманда
Код: Выделить всё
cat access.log | awk '{print "10.0.0.1 " $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9}' > access.log.txt
Re: подскажите как это можно реализовать
Добавлено: 2009-07-25 7:00:10
zg
paradox писал(а):что то я старею
угу с каждым новым днём ровно на один день
paradox писал(а):а обьясните мне и покажите пример что делает эта комманда
с вероятностью 50-60% полностью обнулит лог, с вероятностью 20-30% убьёт частично, ну а если лог маленький, то оставшаяся вероятность - команда сработает, как задумано, то есть просто подставит в начало строки фиктивный айпишнег. Пользы в этом ровно ноль

Re: подскажите как это можно реализовать
Добавлено: 2009-07-25 7:02:44
zg
Funt1k писал(а):вот тока файликов access примерно тысяча и все они идут с датой access.log.20090701 access.log.20090702 и так далее
find легко разрулит ситуацию
Re: подскажите как это можно реализовать
Добавлено: 2009-07-25 7:05:38
paradox
наскоко я помню в access.log много строк
и все разделены \n
поэтому каким образом awk заменит все строки я не представляю))
вот sed наверняка бы справился с этим
или vim
ps
vim может работать не токо как редатор но и как интрепетор комманд
Re: подскажите как это можно реализовать
Добавлено: 2009-07-25 7:08:08
zg
paradox писал(а):поэтому каким образом awk заменит все строки я не представляю))
дак так и заменит, он ведь строковый процессор. Просто докучи строки разделяет на поля.
Re: подскажите как это можно реализовать
Добавлено: 2009-07-25 7:10:00
paradox
хм
awk умеет разделять строки?
всмысле разбирать кучу строк разделеных \n ?
зы
пойду проверю)
Re: подскажите как это можно реализовать
Добавлено: 2009-07-25 7:13:19
zg
paradox писал(а):всмысле разбирать кучу строк разделеных \n ?
ну какбы да -))) его для этого и задумывали
Код: Выделить всё
zg# sh -c 'echo -e "1 2\n3 4"' | awk '{print "bla bla bla "$1" "$2}'
bla bla bla 1 2
bla bla bla 3 4
zg#
Re: подскажите как это можно реализовать
Добавлено: 2009-07-25 7:15:29
paradox
аааа
Код: Выделить всё
paradox@hosting[8:16:40]~> cat tt.log
sd ds
as sa
paradox@hosting[8:16:48]~> cat tt.log | awk '{ print $2" "$1 }'
ds sd
sa as
paradox@hosting[8:16:51]~>
Re: подскажите как это можно реализовать
Добавлено: 2009-07-25 9:41:22
Funt1k
paradox писал(а):что то я старею
а обьясните мне и покажите пример что делает эта комманда
Код: Выделить всё
cat access.log | awk '{print "10.0.0.1 " $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9}' > access.log.txt
cat выводит весть access.log, awk говорит печатать в первом столбце 10.0.0.1 и потом выводить еще 9 столбцов (со 2 по 9), лог переделывается великолепно.
access.log это лог от виндосовского томката.
Re: подскажите как это можно реализовать
Добавлено: 2009-07-25 16:23:20
f_andrey
Funt1k писал(а):вот как бы в шеле все это перетряхнуть что бы все они стали с нужным мне ипом?
у кого какие идеи есть?
А можно "раскрыть" задачу? А то так и не понатно чтоже все таки хочется, вот с AWK вроде у вас все нормально, так че делать то надо? или вы просто решили поделится?
To: Paradox
А AWK чумовой инструмент и не зря он называется
man awk писал(а):awk - pattern-directed scanning and processing language
ибо там впихнут реальный язык программирования, с помощью которого можно сотворить с текстом практически все что угодно, а неглупые дядьки даже пишут книжки, например
вот такие 
Re: подскажите как это можно реализовать
Добавлено: 2009-07-26 12:53:13
paix
f_andrey писал(а):
To: Paradox
А AWK чумовой инструмент и не зря он называется
man awk писал(а):awk - pattern-directed scanning and processing language
ибо там впихнут реальный язык программирования, с помощью которого можно сотворить с текстом практически все что угодно, а неглупые дядьки даже пишут книжки, например
вот такие 
неглупые дядьки, тобиш Арнольд Роббинс являются меинтейнерами gawk

так что им положено такие книжки писать.
Но справедливости ради хочется заметить, что awk это узкоспециализированный язык, в основном ориентированный на обработку табличных данных и генерацию отчетов.
Если необходима более сложная логика и функционал, комплексные языки типа python\perl будут гораздо лучшим выбором. Особенно когда заходит вопрос о переносимости программ.
Re: подскажите как это можно реализовать
Добавлено: 2009-07-26 17:42:22
Funt1k
to f_andrey мне нужно как можно в кратчайшие сроки переделать ВСЕ логи томката, чтобы при прочтении логов было видно что заходили только с 1 адреса. Во вторник надо отчитаться перед начальством, а с какой стороны гайки закручивать я пока незнаю (
Re: подскажите как это можно реализовать
Добавлено: 2009-07-26 18:49:06
f_andrey
Funt1k писал(а):to f_andrey мне нужно как можно в кратчайшие сроки переделать ВСЕ логи томката, чтобы при прочтении логов было видно что заходили только с 1 адреса. Во вторник надо отчитаться перед начальством, а с какой стороны гайки закручивать я пока незнаю (

Как показывает студенческий опыт, и думаю не только мой, в таких ситуациях, гораздо выгоднее править отчет, чем исходные данные, неужели начальство будет самолично копаться в логах, а если это начальство которое на это способно, то уж такую топорную подтасовку заметит

Re: подскажите как это можно реализовать
Добавлено: 2009-07-26 19:46:00
zg
f_andrey писал(а):Как показывает студенческий опыт, и думаю не только мой, в таких ситуациях, гораздо выгоднее править отчет, чем исходные данные
гм... лично я всегда правил исходные данные, чтобы результат был валидным... иногда правил на пару с препоадавателем, чтобы случайно нобелевскую не получить
Funt1k писал(а):чтобы при прочтении логов было видно что заходили только с 1 адреса.
куясе, выгонют тебя за такое дело нафик. А делается всё простым скриптом на шеле с использованием файнд и седа.
Re: подскажите как это можно реализовать
Добавлено: 2009-07-26 19:50:47
Funt1k
эти данные будут отправлены в высшие инстанции но это секрет куда уже и зачем )
и я нашел решение этого :
Код: Выделить всё
ls | while read i; do cat $i | awk '{print "10.10.10.10 " $2 " " $3 " " $4 "6 " $5 " " $6 " " $7 " " $8 " " $9 }' > $i; done
вот тока сервер под линухами повис и ребутнулся
сейас перекачиваю на свой xps m1730, должен выдержать!!!
Re: подскажите как это можно реализовать
Добавлено: 2009-07-26 19:52:35
Funt1k
Funt1k писал(а):чтобы при прочтении логов было видно что заходили только с 1 адреса.
куясе, выгонют тебя за такое дело нафик. А делается всё простым скриптом на шеле с использованием файнд и седа.[/quote]
не выгонят, это не мне а начальству надо
а можешь этот скрипт на файнл и сел?
Re: подскажите как это можно реализовать
Добавлено: 2009-07-26 21:17:12
zg
Funt1k писал(а):а можешь этот скрипт на файнл и сел?
могу
Код: Выделить всё
#!/bin/sh
sdir=old
ddir=new
newip=10.0.0.1
fmask='*.txt'
find $sdir -name "${fmask}" | while read f
do
echo -n "Process file $f ... "
fname=$(basename "$f")
ofile=$ddir/$fname
sed -e "s/[^[:space:]]*/${newip}/" "$f" > $ofile
echo "done -> $ofile"
done
Код: Выделить всё
zg# ./1.sh
Process file old/1.txt ... done -> new/1.txt
zg# cat old/1.txt
192.168.22.22 12 34 56 78
zg# cat new/1.txt
10.0.0.1 12 34 56 78
zg#
Re: подскажите как это можно реализовать
Добавлено: 2009-07-26 21:52:34
Funt1k
пасиб! возьму на вооружение
Re: подскажите как это можно реализовать
Добавлено: 2009-07-27 11:24:58
paix
Код: Выделить всё
find . -name "*.log" | xargs perl -pi -e 's@^([0-9]{1,3}\.){3}[0-9]{1,3}@10.0.0.1@'