powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Сформировать Insert на основе текстового файла AWK
37 сообщений из 37, показаны все 2 страниц
Сформировать Insert на основе текстового файла AWK
    #38172843
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, сам ниразу ни скриптер, а чистый программист, возникла такая задача, в общем на одном предприятии где установлен наш программный продукт(который представляет из себя бек+фронтофис) возникла утечка интернет траффика, лимиты превышены в разы, потому что ктото из сотрудников завсегдатай торрентов и любитель танков, так вот предложили идею силами нашего ПО + любого стороннего трафик-монитора смотреть отчеты по трафику по каждому сотруднику(у каждого свой пк), 1-е что пришло в голову - программа по учету траффика(к примеру http://ipstat.code-art.ru/) стоит у них на серве, сохраняет логи в какунибудь директорию, потом нашим ПО мы эти файлы открываем, инсёртим в бд, и вроде все красиво, НО ведь автоматизация уже давно шагает по стране и вручную каждый день пихать эти логи в ПО(по другому никак) как то не айс, поэтому придумали следующее пишем скрипт на баше/авк который сам себя запускает, из лог файлов формирует инсёрт, и потом запиливает это всё в FireBird, но повторюсь, что я ниразу не скриптер, пишу сейчас в awk и не пойму почему всё что у меня в теле скрипта идёт на print? вот к примеру:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
  #!/usr/bin/awk -f
  BEGIN {
         FS="|"   
      }
      {
        insert = insert +"insert into trafficlog(t_id,t_ipfrom,t_ipto,t_bytecount,t_timefirst,t_timelast) values((select
      GEN_ID(GEN_TRAFFICLOG_T_ID,1)from RDB$database),"$1",",$2","$7",",$9",",$10");"
      }
  END {
                print insert
                print "---------------------=-------------=---------------=-----------=----------=-"
      }


Он выводит мне в консоль insert = insert +.......$10");" ^syntax error
хотя должен клеить строку, а уже в end вывести мне её в консоль ЧЯДНТ?
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38172853
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С чего вы взяли, что пользователи виноваты?
Может у вас ботнет или что-то подобное, а пользователи ни сном ни духом
Как у вас выход в инет организован?

ЗЫ.А пользователи как пить дать на виндах сидят
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38172854
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по тому, что вы написали - у вас выход через *х машину
Поставьте , например, на ней ntop, посмотрите что у вас происходит
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38172903
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
landy , никаких бот сетей и прочего сверхестественного, все что происходит банально просто - я сам смотрел эти логи, через каждую вторую строчку пакеты с серверов world of tanks, соц сетей, файлообменников и ютуба, все что мне нужно просто залить их в базу, а то что через йух машину, оно и понятно, синтаксиса не знаю, сижу гуглю.
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38172910
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
зы, немного поясню - все пользователи сидят на винде, сервер-шлюз с firebird на clearOS'и, на нем и нужен скрипт
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38172944
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
whizzzkeyОн выводит мне в консоль insert = insert +.......$10");" ^syntax error
хотя должен клеить строку,Вроде как в awk пробел является символом конкатенции.
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38172974
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
на самом деле вообще тупо слитно, это я по привычке
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38173060
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Боле-менее освоился я в скриптах, теперь проблема в следующем, мне нужно передать файловый поток с awk в isql, делаю вроде все как по гуглу: путь к isql -u Юзер -p Пароль localhost:база, вроде коннектится, так как ругнулся пару раз на неправильный пароль, потом стал выдавать мне Expected end of statement, encountered eof
сам скрипт на баше выглядит так:
Код: powershell
1.
2.
3.
#!/bin/bash
  zcat /home/db/traf/*.gz | awk -f testscript_awk |/opt/firebird/bin/isql -u SYSDBA -p MASTERKEY -s 3 
  localhost:/home/db/data/ichin/ichin.gdb;
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38173114
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и хорошо
Поставьте ntop - он вам по хостам на интерфейсах статистику покажет, графики нарисует
и т д и т п
Пишет он в базу RRD
Просто и быстро, все сразу увидите
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38173469
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
whizzzkey Expected end of statement, encountered eof isql исполняет SQL скрипт, состоящий как минимум из одного SQL оператора, обычно разделитель ";", если командой "set term" явно нет задан другой.
В общем точку с запятой пробовали в конце каждой команды ставить?
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38173616
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky Expected end of statement, encountered eof isql исполняет SQL скрипт, состоящий как минимум из одного SQL оператора, обычно разделитель ";", если командой "set term" явно нет задан другой.
В общем точку с запятой пробовали в конце каждой команды ставить?[/quot]
Да я уже незнаю куда её прилепить, в туториале ваще всё без ; http://www.firebirdfaq.org/faq124/, пичалька в общем пока=(
landy с радостью бы поставил эту наиполезнейшую утилиту ихнему начальнику на комп и пошел бы курить плюшки=), но задача к сожалению стоит другая, нужно своё а не чужое
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38173686
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разреж требопровод на 2 части и отлаживай порознь.
0
echo CONNECT 'localhost:/home/db/data/ichin/ichin.gdb' USER 'SYSDBA' PASSWORD '*********'; > a.sql

1
zcat /home/db/traf/*.gz | awk -f testscript_awk >> a.sql
2
/opt/firebird/bin/isql -i a.sql

пример корректного скрипта:

CONNECT 'localhost:/home/db/data/ichin/ichin.gdb' USER 'SYSDBA' PASSWORD '*********';

select cast(372.450/10.0 as numeric(9,2)) from rdb$database;
select cast(372.45/10 as numeric(9,2)) from rdb$database;
commit;
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38174116
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevskyразреж требопровод на 2 части и отлаживай порознь.
Спасибо, только так он у меня и заработал=)
Теперь вопрос такой, как сформировать дату из переменно средствами awt/bash? поля $9 и $10 это timestamp(к примеру 1362457150 ), который чтобы запихнуть в таблицу нужно привести в нормальный вид, firebird почему то не хочет кастовать таймстамп из инта 1362457150 , зато UNIX-команда date
Код: powershell
1.
-d @1362457150 +%d%m%y" "%T


выдает нормальную дату 050313 15:19:10
, которую можно кастонуть, но теперь проблема следущая - нехотит делать дату из поля
Код: powershell
1.
date -d @$9 +%d%m%y" "%T 


инвалид чар @ ин експрешен
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38174389
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
whizzzkeyвыдает нормальную дату 050313 15:19:10 воткни пару точек до вида
05.03.13 15:19:10 и скорми isql, он съест, можно и не кастовать более никуда.
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38174391
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
whizzzkey
Код: powershell
1.
-d @1362457150 +%d%m%y" "%T

-d @1362457150 +%d.%m.%y" "%T
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38174397
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
коммиты в скрипте на забудь расставить, один коммит на примерно тыщу инсертов обычно самое оно, реже будут длинные транзакции и память кушать будет, слишком часто тормозить будет.
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38174540
Пухлый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
whizzzkeyIvan_Pisarevskyразреж требопровод на 2 части и отлаживай порознь.
Спасибо, только так он у меня и заработал=)
Теперь вопрос такой, как сформировать дату из переменно средствами awt/bash? поля $9 и $10 это timestamp(к примеру 1362457150 ), который чтобы запихнуть в таблицу нужно привести в нормальный вид, firebird почему то не хочет кастовать таймстамп из инта 1362457150 , зато UNIX-команда date
Код: powershell
1.
-d @1362457150 +%d%m%y" "%T


выдает нормальную дату 050313 15:19:10
, которую можно кастонуть, но теперь проблема следущая - нехотит делать дату из поля
Код: powershell
1.
date -d @$9 +%d%m%y" "%T 


инвалид чар @ ин експрешен

Код: html
1.
2.
3.
4.
Red Hat Enterprise Linux Server release 5.1

echo 1362457150 | awk '{printf(strftime("%d.%m.%Y %H:%M:%S",$1))}'
05.03.2013 08:19:10
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38174949
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevskyтормозить будет.узким местом будет парсинг миллионов инсертов, супер глупо решать эту задачу скриптом, неужели в firebird нет инструментов для загрузки текстовых файлов? лоадеров? внешних таблиц?

Ну и в любом случае идиотизм писать в текстовые файлы, потом их парсить и лупить в бд, проще прямо писать в бд, зачем файлы?
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38175128
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Денисузким местом будет парсинг миллионов инсертов, супер глупо решать эту задачу скриптомпросили скриптом, я подсказал. Миллион инсертов на самом деле отработает достаточно быстро, для "раз в месяц" пойдет.
Журавлев Дениснеужели в firebird нет инструментов для загрузки текстовых файлов?как такового нет, но решается через те самые внешние таблицы, они есть. Да, заливка через экстернал тэйблз будет существенно быстрее.
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38175392
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Журавлев ДенисНу и в любом случае идиотизм писать в текстовые файлы, потом их парсить и лупить в бд, проще прямо писать в бд, зачем файлы?
Согласен 100%, но не нашел как кормить isql запросами напрямую, т.е он у меня выдавал ошибку когда я пытался ему пихать напрямую, а из файла всё спокойно сьел, вот пример
Код: powershell
1.
/мой путь к isql/isql -u Юзер -p Пароль localhost:моя_база.gdb insert into тото-тото values сёто-сёто; commit;


Выдает ошибку, НО
Код: powershell
1.
/мой путь к isql/isql -u Юзер -p Пароль -i запрос.sql localhost:моя_база.gdb 


Полёт нормальный
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38175515
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
whizzzkeyЖуравлев ДенисНу и в любом случае идиотизм писать в текстовые файлы, потом их парсить и лупить в бд, проще прямо писать в бд, зачем файлы?
Согласен 100%, но не нашел как кормить isql запросами напрямую, т.е он у меня выдавал ошибку когда я пытался ему пихать напрямую, а из файла всё спокойно сьел, вот пример
Код: powershell
1.
/мой путь к isql/isql -u Юзер -p Пароль localhost:моя_база.gdb insert into тото-тото values сёто-сёто; commit;


Выдает ошибку, НО
дак естественно через stdin надо, никто sql запросы через параметры не ест. В любом случае напрямую это через odbc, jdbc и т.д.
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38175914
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев ДенисВ любом случае напрямую это через odbc, jdbc и т.д.ОДБЦ это посредник, isql работает с сервером напрямую (через клиентсукю либу fbclient.so), боюсь одбц путь не спрямит.
whizzzkeyВыдает ошибкутебе бы langref.pdf и прочие доки почитать, www.ibase.ru и далее по порядку. ;)
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38176063
Фотография Журавлев Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_PisarevskyЖуравлев ДенисВ любом случае напрямую это через odbc, jdbc и т.д.ОДБЦ это посредник, isql работает с сервером напрямую (через клиентсукю либу fbclient.so), боюсь одбц путь не спрямит.
проблема только в том что isql это программа, которой нужно парсить скрипт, которая не может запрепарить курсор и вставлять пачку строк одним exec
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38176081
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Дениспроблема только в том что isql это программа, которой нужно парсить
скрипт, которая не может запрепарить курсор и вставлять пачку строк одним exec

Вообще-то - может. Но ТС явно не знает о set bult_insert.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38176103
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Журавлев Дениснужно парсить скрипт,Для задачи описанной в первом посте за глаза, ночью состряпать скрпит, врядли там более миллиона строк и зафигачить его в базу, никто и не заметит нагрузки. Честно говоря не вижу причин выискивать в этой задаче как выиграть несколько минут.
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38176153
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_PisarevskyЖуравлев Дениснужно парсить скрипт,Для задачи описанной в первом посте за глаза, ночью состряпать скрпит, врядли там более миллиона строк и зафигачить его в базу, никто и не заметит нагрузки. Честно говоря не вижу причин выискивать в этой задаче как выиграть несколько минут.

Да конечно, мыж не шатл в космос запускем=) для запуска 2 раза в месяц само то=)
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38192780
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребят а как можно реализовать перебор содержимого папок в каталоге на bash?
делал по гуглу, чтото не помогло, ругается
Код: powershell
1.
2.
for /r "localhost:\home\db\data" /d %%i in (*) do (
#echo Name of folder: %%i) 


syntax error near unexpected token `home/db/data' ./test: line 2: `for /r home/db/data /d %%i in (*) do ('
брал вот отсюда
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38192822
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: powershell
1.
for i in `ls -R` ; do echo $i; done


А что с ними дальше делать? а то можно find -exec заюзать
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38192851
Ихтиандр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
find без exec тоже подойдет
нужен ведь список каталогов?
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38192933
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
задача вобще такая эмм шарить покаждой папке, доставать все файлы и запихывать во другую папку, с файлами и запихиванием я уже разобрался, мне не понятно как организовать цикл перебора по каждой папке, да еще кстати внутри каждой папки есть подпапки, т.е вложенный цикл уже получается
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38192964
MazoHist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну дык find -exec самое то - и никаких циклов. А папка назначения одна?
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38193040
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
find -exec самое то
к сожалению ваще не то!
Ладно щас опишу задачу полностью - В общем то о чем я говорил в первом посте этой темы + добавлю, что поменяли траффик монитор, теперь новая программа выдает немного другую струтуру - она создает папку с текущей датой и пихает туда файлы c именем вида "айпишник.[номерфайлавпапке]", получается что в двух разных папках всегда будут встречатся одинаковые файлы, и чтоб не затереть ничего, прийдется циклом каждую папку перебирать, инсёртить в бд её содержимое и потом всё удалять
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38193120
Ихтиандр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
for i in `find ./ -type d` do

ls-l $i

done
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38193182
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделал немного по другому

Код: powershell
1.
2.
3.
for param in `ls -1 -F | grep "/" `; do
  Инсерт_в_базу
done
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38193192
Пухлый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
whizzzkey,

Код: html
1.
чтоб не затереть ничего, прийдется циклом каждую папку перебирать, инсёртить в бд её содержимое и потом всё удалять



Я что-то не понял, Вы же из файлов инсертите, какая разница как называется файл и в какой папке лежит. Нашли файл, залили данные в базу.
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38193234
whizzzkey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пухлый,
Есть 10 папок, в каждой папке файлы с одинаковым именем и разрешением .gz , если есть способ их всех разархивировать ни затерев ни одного то просвятите
...
Рейтинг: 0 / 0
Сформировать Insert на основе текстового файла AWK
    #38193357
Пухлый
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
whizzzkeyПухлый,
Есть 10 папок, в каждой папке файлы с одинаковым именем и разрешением .gz , если есть способ их всех разархивировать ни затерев ни одного то просвятите

Ну как вариант:

Код: html
1.
2.
3.
4.
5.
6.
7.
8.
a=0;for i in `find ./temp* -type f`; do echo $i; gunzip -c "${i}" > ./temp3/"$(basename "${i}" .gz)$a"; a=$((a+1)); done

./temp/Trace.awk.gz
./temp1/Trace.awk.gz

 ls -l ./temp3
Trace.awk0
Trace.awk1
...
Рейтинг: 0 / 0
37 сообщений из 37, показаны все 2 страниц
Форумы / Unix-системы [игнор отключен] [закрыт для гостей] / Сформировать Insert на основе текстового файла AWK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]