Страница 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 писал(а):что то я старею
угу с каждым новым днём ровно на один день :smile:
paradox писал(а):а обьясните мне и покажите пример что делает эта комманда
с вероятностью 50-60% полностью обнулит лог, с вероятностью 20-30% убьёт частично, ну а если лог маленький, то оставшаяся вероятность - команда сработает, как задумано, то есть просто подставит в начало строки фиктивный айпишнег. Пользы в этом ровно ноль :smile:

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
ибо там впихнут реальный язык программирования, с помощью которого можно сотворить с текстом практически все что угодно, а неглупые дядьки даже пишут книжки, например вот такие :evil:

Re: подскажите как это можно реализовать

Добавлено: 2009-07-26 12:53:13
paix
f_andrey писал(а): To: Paradox
А AWK чумовой инструмент и не зря он называется
man awk писал(а):awk - pattern-directed scanning and processing language
ибо там впихнут реальный язык программирования, с помощью которого можно сотворить с текстом практически все что угодно, а неглупые дядьки даже пишут книжки, например вот такие :evil:
неглупые дядьки, тобиш Арнольд Роббинс являются меинтейнерами 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 писал(а):Как показывает студенческий опыт, и думаю не только мой, в таких ситуациях, гораздо выгоднее править отчет, чем исходные данные
гм... лично я всегда правил исходные данные, чтобы результат был валидным... иногда правил на пару с препоадавателем, чтобы случайно нобелевскую не получить :roll:
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
вот тока сервер под линухами повис и ребутнулся :shock:
сейас перекачиваю на свой 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@'