Парсить csv и заносить в mysql

На самом деле это единственный раздел про unix на этом форуме

Модератор: /dev/random

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Парсить csv и заносить в mysql

Сообщение nerve » 28.05.2014 18:35

csv файлик генерируется проходной системой. я его переименовал в txt так как иначе не хотел прикреплятся.
мне нужно его отпарсить и занести в майскл, в приблизительно такую таблицу

Код: Выделить всё

+-----------+----------+------+-----+---------+----------------+
| Field     | Type     | Null | Key | Default | Extra          |
+-----------+----------+------+-----+---------+----------------+
| id        | int(6)   | NO   | PRI | NULL    | auto_increment |
| date      | datetime | NO   |     | NULL    |                |
| direction | text     | NO   |     | NULL    |                |
| user      | text     | NO   |     | NULL    |                |
+-----------+----------+------+-----+---------+----------------+

чтоб получить такое содержимое

Код: Выделить всё

+----+---------------------+-----------+------+
| id | date                | direction | user |
+----+---------------------+-----------+------+
|  1 | 2014-05-27 14:02:23 | In        | epr  |
|  2 | 2014-05-27 13:57:32 | In        | abu  |
|  3 | 2014-05-27 13:56:21 | In        | emo  |
|  4 | 2014-05-27 13:54:30 | Out       | abu  |
|  5 | 2014-05-27 13:52:20 | In        | emy  |
|  6 | 2014-05-27 13:49:42 | In        | vdo  |
|  7 | 2014-05-27 13:40:45 | Out       | emo  |
|  8 | 2014-05-27 13:40:23 | In        | set  |
|  9 | 2014-05-27 13:38:24 | In        | abu  |
| 10 | 2014-05-27 13:35:03 | Out       | abu  |
+----+---------------------+-----------+------+

скрипт получился такой

Код: Выделить всё

#!/bin/bash
input="EventReport.csv"
sed -n '/[()]/p' $input | \
awk -F, '{print $1,$2,$6}' | \
awk '{print $1,$2,$6,$10}' | \
awk -F"/| " '{print $3"-"$1"-"$2" "$4","$5","$6}' | \
sed -e '/Reader/d' -e 's/(//' -e 's/)//' | tac | \
while IFS="," read date direction user; do
    echo "INSERT INTO checkpoint (date,direction,user) VALUES ('$date', '$direction', '$user');"
done | mysql -uroot -ppassword visit

Батти меня уже поругал за пайпы, но как можно сделать лучше я пока не додумался. хелп!
итоговую таблицу планирую использовать в дальнейшем чтоб делать запросы кто, когда зашел/вышел и сколько времени провел на рабочем месте.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:

aleksnsk
Сообщения: 180

Re: Парсить csv и заносить в mysql

Сообщение aleksnsk » 28.05.2014 19:07

на php по запросу php exel to mysql в гугле
там готовые проги уже есть 2-5 их примерно.

Просто запускать будешь из консоли php-скрипт на выполнение.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсить csv и заносить в mysql

Сообщение drBatty » 28.05.2014 19:24

nerve писал(а):
28.05.2014 18:35
Батти меня уже поругал за пайпы

в след. раз вместо кучи пайпов покажи что есть, и что хочешь сделать

вот такой пример я составил:

$

sed -r 'h;s/,/\n/2;s/\n.*//;y~/,~- ~;x;s/,/\n/5;s/(\S+\s+){4}(\S+)\s+[^(]*\((.*)\).*/\2\n\3/;H;g'


вроде работает. Выдаёт:

Код: Выделить всё

5-27-2014 13:09:22
Out
emy
5-27-2014 13:06:47
Out
abu
5-27-2014 13:04:31
Out
epr
5-27-2014 13:01:15
Out
ppo
5-27-2014 13:00:36
Out
set
5-27-2014 12:59:53
Out
English teacher
5-27-2014 12:54:44
In
sma


aleksnsk писал(а):
28.05.2014 19:07
на php по запросу php exel to mysql в гугле

php головного мозга? Тут любой ЯП подойдёт.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсить csv и заносить в mysql

Сообщение drBatty » 28.05.2014 19:31

Код: Выделить всё

#!/bin/sed -rf
h
s/,/\n/2
s/\n.*//
y~/,~- ~
x
s/,/\n/5
s/(\S+\s+){4}(\S+)\s+[^(]*\((.*)\).*/\2\n\3/
H
g

а в конце этого скрипта нужно воткнуть команду вставки в СУБД

Тогда скрипт не только распарсит, но и загрузит всё в базу.

Если скорость не устраивает, то лучше сначала команды 'INSERT INTO…' в файл записать, а потом файл скормить mysql, это быстрее. Либо конвейером, используя скрипт как фильтр.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
faria
Сообщения: 70

Re: Парсить csv и заносить в mysql

Сообщение faria » 28.05.2014 19:55

nerve писал(а):
28.05.2014 18:35
csv файлик генерируется проходной системой. я его переименовал в txt так как иначе не хотел прикреплятся.
мне нужно его отпарсить и занести в майскл


drBatty писал(а):
28.05.2014 19:24
php головного мозга? Тут любой ЯП подойдёт.


Я конечно могу быть не прав и могу быть обруганным товарищем Батти, потому как по составленному адовому sed-шаблону, который он написал, видно, что он явно в теме, но всетаки для меня более идеалогично писать парсилку для нетривиальных файлов, на каком-нибудь из ЯП опционально. Имхо мне кажется, что парсилка заточенная под конкретный файл, работает в разы быстрее(конечно зависит от того, как написали) ну и в дальнейшем исходники пригодятся для других парсилок.
Спасибо сказали:

Аватара пользователя
faria
Сообщения: 70

Re: Парсить csv и заносить в mysql

Сообщение faria » 28.05.2014 20:05

aleksnsk писал(а):
28.05.2014 19:07
на php по запросу php exel to mysql в гугле
там готовые проги уже есть 2-5 их примерно.

Просто запускать будешь из консоли php-скрипт на выполнение.

Оффтоп
Странно, что именно вы отсылаете кого-либо в гугл. Тогда, как если вам скинуть ссылку(даже не в гугл) на конкретный мануал, вы возвращаетесь с велосипедом(громко сказано, скорее со схемой велосипеда, потому как ничего конкретного вы не предлагаете).
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Парсить csv и заносить в mysql

Сообщение Bizdelnick » 28.05.2014 20:09

Там в конце строки такого вида:

Код: Выделить всё

3/26/2014,13:38:53,Alarm,4/2/2014, 17:18:49,Input 20: PANEL TAMPER Alarm,
Где в них direction, и где user?
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсить csv и заносить в mysql

Сообщение drBatty » 28.05.2014 21:01

faria писал(а):
28.05.2014 19:55
Я конечно могу быть не прав и могу быть обруганным товарищем Батти, потому как по составленному адовому sed-шаблону, который он написал, видно, что он явно в теме, но всетаки для меня более идеалогично писать парсилку для нетривиальных файлов, на каком-нибудь из ЯП опционально.

1. sed это ЯП, который специально заточен для парсинга текстов.
2. то, что он выглядит "адово" это не баг, а фича. Просто это задача как раз для sed, и sed-программа получается самой короткой
3. sed есть везде. Php есть не везде, а даже там, где он есть, не всегда есть php_cli.
4. я же сказал: любой ЯП подойдёт. Но зачем забивать гвозди топором? Я знаю -- можно. Я и забить могу, уж поверьте, php я знаю неплохо. Но зачем?
faria писал(а):
28.05.2014 19:55
Имхо мне кажется, что парсилка заточенная под конкретный файл, работает в разы быстрее(конечно зависит от того, как написали) ну и в дальнейшем исходники пригодятся для других парсилок.

когда "кажется" надо крестится. А вы возьмите, и проверьте. Ставлю 100 против одного, что мой скрипт опустит ниже плинтуса ваш пхп (в этой задаче). Причём по всем параметрам сразу, в т.ч. и по скорости и простоте разработки. Мне этот скрипт написать — как два байта переслать.

И да, какие "исходники"? Просто берём, и парсим.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
faria
Сообщения: 70

Re: Парсить csv и заносить в mysql

Сообщение faria » 28.05.2014 21:39

drBatty писал(а):
28.05.2014 21:01
faria писал(а):
28.05.2014 19:55
Я конечно могу быть не прав и могу быть обруганным товарищем Батти, потому как по составленному адовому sed-шаблону, который он написал, видно, что он явно в теме, но всетаки для меня более идеалогично писать парсилку для нетривиальных файлов, на каком-нибудь из ЯП опционально.

1. sed это ЯП, который специально заточен для парсинга текстов.
2. то, что он выглядит "адово" это не баг, а фича. Просто это задача как раз для sed, и sed-программа получается самой короткой
3. sed есть везде. Php есть не везде, а даже там, где он есть, не всегда есть php_cli.
4. я же сказал: любой ЯП подойдёт. Но зачем забивать гвозди топором? Я знаю -- можно. Я и забить могу, уж поверьте, php я знаю неплохо. Но зачем?
faria писал(а):
28.05.2014 19:55
Имхо мне кажется, что парсилка заточенная под конкретный файл, работает в разы быстрее(конечно зависит от того, как написали) ну и в дальнейшем исходники пригодятся для других парсилок.

когда "кажется" надо крестится. А вы возьмите, и проверьте. Ставлю 100 против одного, что мой скрипт опустит ниже плинтуса ваш пхп (в этой задаче). Причём по всем параметрам сразу, в т.ч. и по скорости и простоте разработки. Мне этот скрипт написать — как два байта переслать.

И да, какие "исходники"? Просто берём, и парсим.


Кто сказал, что мой пхп? И причем тут вообще пхп? Ваш sed это не более чем бинарник хавающий параметром шаблон(ну ладно, громко сказано, это всетаки интерпретаор со своим командным языком, но сути это не меняет, это бинарник с обвесом). Кто сказал, что я не могу написать бинарник на щях, который не может опустить ниже плинтуса ваш sed в "частности", которому прежде чем парсить надо распарсить шаблон? Что за бред.

*Под "частностью", я понимаю бинарник заточенный под парсинг уже конкретного шаблона, конкретного текста.

Гвозди топором это да, это потребует больше времени для реализации, чем писать шаблон для sed, но работать будет быстрее.

Я не упрекал вас в знании пхп.

И зачем меня сразу в штыки. Я например отнесся с глубоким уважением к вам, потому как вы с ходу сгенерили такой адовый шаблон(я проверил работает)

И да, какие "исходники"? Просто берём, и парсим.


Вы неправильно меня поняли. Я изначально иммел ввиду щи, а не другие интерпретируемые языки. Исходники на щях, просто компилируем и запускаем, в моем контексте.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Парсить csv и заносить в mysql

Сообщение Bizdelnick » 28.05.2014 21:53

drBatty писал(а):
28.05.2014 21:01
Ставлю 100 против одного, что мой скрипт опустит ниже плинтуса ваш пхп (в этой задаче). Причём по всем параметрам сразу, в т.ч. и по скорости и простоте разработки.

Это далеко не все параметры. Есть ещё такой, например, как читаемость...

faria писал(а):
28.05.2014 21:39
работать будет быстрее

А оно надо?
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Парсить csv и заносить в mysql

Сообщение Bizdelnick » 28.05.2014 21:59

Код: Выделить всё

#!/usr/bin/perl

<>; # отбрасываем первую строку с заголовком

while (<>) {
    my ($date, $time, $evtype, $ackdate, $acktime, $msg) = split /,/;

    my ($m, $d, $y) = split '/', $date;
    $date = sprintf '%04d-%02d-%02d', $y, $m, $d;

    if (my ($direction, $user) = $msg =~ m/ - (In|Out) .* \((.+)\)$/) { # если строка не соответствует шаблону (а таких в примере много) - ничего не делаем
        print "INSERT INTO checkpoint (date,direction,user) VALUES ('$date $time', '$direction', '$user');\n"
    }
}

Upd. Немного поправил.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
faria
Сообщения: 70

Re: Парсить csv и заносить в mysql

Сообщение faria » 28.05.2014 22:22

А оно надо?


Откуда мне знать, что надо ТС, что не надо. Как я понял его не устраивают конвееры, я предложил свой вариант, но Батти сказал, что он ниже плинтуса. Хз может быть и ниже плинтуса, но как по мне так, частное решение под конкретную задачу выигрывает над общим. Я согласен, что sed это круто и сам им бывало пользовалься, это не значит, что надо возводить это решение в абсолют.

Собственно ваш вариант на переле это только подтверждает. ну и более читабельно раз уж вы упомянули читабельность.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсить csv и заносить в mysql

Сообщение drBatty » 28.05.2014 22:45

faria писал(а):
28.05.2014 21:39
ну ладно, громко сказано, это всетаки интерпретаор со своим командным языком, но сути это не меняет, это бинарник с обвесом

коллекция компиляторов GCC это тоже "бинарник с обвесом".
faria писал(а):
28.05.2014 21:39
Кто сказал, что я не могу написать бинарник на щях, который не может опустить ниже плинтуса ваш sed

я сказал. Это очевидно по вашим же словам.
faria писал(а):
28.05.2014 21:39
которому прежде чем парсить надо распарсить шаблон? Что за бред.

на малых файлах это будет незаметно т.к. они малые, и посчитать время не получится. На больших файлах само чтение файла займёт львиную часть времени, и именно оно будет тормозить.
Ну и обработка скрипта тривиальна, и выполняется на порядок быстрее, чем собственно работа. Т.ч. вряд-ли у вас получится выиграть более 10% производительности.
faria писал(а):
28.05.2014 21:39
*Под "частностью", я понимаю бинарник заточенный под парсинг уже конкретного шаблона, конкретного текста.

разработка такой "частности" слишком дорогая. Ваш покорный слуга вам забесплатно этого не напишет. А то, что напишите вы -- вряд-ли будет хотя-бы в 10 раз медленнее sed, скорее в 100 раз медленнее.

Учтите, что sed использует системную glibc, которая оптимизирована под многие процессоры. Уверен, что "на коленке" вы не достигнете такой же производительности. А запуск системных процедур из C кода будет работать ничуть не лучше sed(в принципе sed это и есть API для regex(3))

faria писал(а):
28.05.2014 21:39
Вы неправильно меня поняли. Я изначально иммел ввиду щи, а не другие интерпретируемые языки. Исходники на щях, просто компилируем и запускаем, в моем контексте.

долго, муторно, и результат ничуть не лучше.
Bizdelnick писал(а):
28.05.2014 21:53
Это далеко не все параметры. Есть ещё такой, например, как читаемость...

1. субъективно
2. чья-бы корова мычала ☺
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсить csv и заносить в mysql

Сообщение drBatty » 28.05.2014 22:53

faria писал(а):
28.05.2014 22:22
Как я понял его не устраивают конвееры

неправильно поняли. Конвейеры опасны и неуправляемы. А вот производительность у них, кстати, неплохая. Особенно на современных многоядерных CPU, т.к. все задачи выполняются параллельно.
faria писал(а):
28.05.2014 22:22
Батти сказал, что он ниже плинтуса.

ЩИТО? Это был ответ на: Парсить csv и заносить в mysql
тут в цитатах кнопочка есть: Изображение
про "пхп головного мозга" я писал aleksnsk, а не вам.

faria писал(а):
28.05.2014 22:22
Я согласен, что sed это круто и сам им бывало пользовалься, это не значит, что надо возводить это решение в абсолют.

я никогда не возводил sed в абсолют. Это ваша фантазия.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
faria
Сообщения: 70

Re: Парсить csv и заносить в mysql

Сообщение faria » 28.05.2014 23:17

коллекция компиляторов GCC это тоже "бинарник с обвесом".

кто спорит, только что это в вашу пользу доказывает

faria писал(а):
28.05.2014 21:39
Кто сказал, что я не могу написать бинарник на щях, который не может опустить ниже плинтуса ваш sed

я сказал. Это очевидно по вашим же словам.

Не полностью процитировали, я не говорил о sed в целом, а о вашем решении. Говорить можете что угодно, какой в этом прок.
faria писал(а):
28.05.2014 21:39
которому прежде чем парсить надо распарсить шаблон? Что за бред.

на малых файлах это будет незаметно т.к. они малые, и посчитать время не получится. На больших файлах само чтение файла займёт львиную часть времени, и именно оно будет тормозить.

Сид их не читает? конвеером же хавает. Ну лады +1

Ну и обработка скрипта тривиальна, и выполняется на порядок быстрее, чем собственно работа. Т.ч. вряд-ли у вас получится выиграть более 10% производительности.
faria писал(а):
28.05.2014 21:39
*Под "частностью", я понимаю бинарник заточенный под парсинг уже конкретного шаблона, конкретного текста.

разработка такой "частности" слишком дорогая. Ваш покорный слуга вам забесплатно этого не напишет. А то, что напишите вы -- вряд-ли будет хотя-бы в 10 раз медленнее sed, скорее в 100 раз медленнее.

Ну это кому как удобнее. "Субьективно", как вы выразились ниже.
Учтите, что sed использует системную glibc, которая оптимизирована под многие процессоры. Уверен, что "на коленке" вы не достигнете такой же производительности. А запуск системных процедур из C кода будет работать ничуть не лучше sed(в принципе sed это и есть API для regex(3))

этого я вообще не понял, что значит "системную глибс" все так или иначе использует системную глибц, либц это вообще сердце всех приложений, а не только сида. Ну допустим не понял. С абривеатурой апи знаком, зачем ссылку на вики кинули не понятно.
faria писал(а):
28.05.2014 21:39
Вы неправильно меня поняли. Я изначально иммел ввиду щи, а не другие интерпретируемые языки. Исходники на щях, просто компилируем и запускаем, в моем контексте.

долго, муторно, и результат ничуть не лучше.


Так и не понял с чего вы взяли.

Имхо, мне не понятно, с чего вы на меня накинулись... аргументов не приводите, все что написали в основном вызывает недоумение. Мой вариант не хуже вашего, а ваш вариант не единственно верный. может стоит отнестись проще?
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Парсить csv и заносить в mysql

Сообщение Bizdelnick » 28.05.2014 23:27

faria писал(а):
28.05.2014 23:17
Мой вариант не хуже вашего

IMHO хуже. Как думаете, почему?
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
faria
Сообщения: 70

Re: Парсить csv и заносить в mysql

Сообщение faria » 28.05.2014 23:33

Bizdelnick писал(а):
28.05.2014 23:27
faria писал(а):
28.05.2014 23:17
Мой вариант не хуже вашего

IMHO хуже. Как думаете, почему?


Потому что:
Bizdelnick писал(а):
28.05.2014 23:27
IMHO хуже.


А на ваше имхо мне глубоко нас..ть.
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Re: Парсить csv и заносить в mysql

Сообщение nerve » 29.05.2014 00:12

Bizdelnick писал(а):
28.05.2014 20:09
Там в конце строки такого вида:

Код: Выделить всё

3/26/2014,13:38:53,Alarm,4/2/2014, 17:18:49,Input 20: PANEL TAMPER Alarm,
Где в них direction, и где user?

такие и другие строки, где в конце нет (user-a) не попадают в обработку. в лог валятся всякие алармы и прочие сообщения, которые нужно игнорировать. я обхожу это первой командой sed-a.
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4666
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Парсить csv и заносить в mysql

Сообщение SLEDopit » 29.05.2014 00:21

как вариант, можно заменить все пробелы на запятые и awk'ом разобрать, как будто файл с единым разделителем идёт. имхо, так проще всего.

Код: Выделить всё

sed '1d;/[()]/!d;s/[() ]/,/g' source.file | awk -F, '{print "INSERT INTO checkpoint (date,direction,user) VALUES (\""$1 $2"\", \""$9"\", \""$14"\");"}'
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Парсить csv и заносить в mysql

Сообщение Bizdelnick » 29.05.2014 00:34

nerve писал(а):
29.05.2014 00:12
такие и другие строки, где в конце нет (user-a) не попадают в обработку.

Ну значит в приведённом выше варианте всё правильно.

faria писал(а):
28.05.2014 23:33
Потому что

Ответ неправильный.
Внимание, правильный ответ: потому что Вашего варианта нет. Когда Вы его покажете - можно будет сравнивать. А если Вы сюда просто потрепаться зашли - то разделом ошиблись.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсить csv и заносить в mysql

Сообщение drBatty » 29.05.2014 03:27

faria писал(а):
28.05.2014 23:17
Говорить можете что угодно

угу. Могу. Я своё решение предоставил. А вот вы — говорите.
faria писал(а):
28.05.2014 23:17
Сид их не читает?

читает-нечитает… Я уже тестировал и то и другое. Выводы сделал. Если вам интересно — опровергните или согласитесь.
faria писал(а):
28.05.2014 23:17
разработка такой "частности" слишком дорогая. Ваш покорный слуга вам забесплатно этого не напишет. А то, что напишите вы -- вряд-ли будет хотя-бы в 10 раз медленнее sed, скорее в 100 раз медленнее.

Ну это кому как удобнее. "Субьективно", как вы выразились ниже.

не. Это как раз объективно, т.к. я код таки написал, а вы — нет. А значит мой подход объективно результативнее вашего. А "субъективно" я говорил про читаемость.
faria писал(а):
28.05.2014 23:17
этого я вообще не понял, что значит "системную глибс" все так или иначе использует системную глибц, либц это вообще сердце всех приложений, а не только сида. Ну допустим не понял. С абривеатурой апи знаком, зачем ссылку на вики кинули не понятно.

нет, не все. Вот grep например не юзает regex(3).
ссылка потому, что очень редко API используют в таком значении, как я. Что-бы вы убедились, что я в этот термин вкладываю общепринятое значение, а не какое-то своё.
faria писал(а):
28.05.2014 23:17
Так и не понял с чего вы взяли.

ВНЕЗАПНО: я пробовал и так и так. Ваша очередь, если вы мне не верите на слово.
И я на вас не накидывался, просто не согласился. Причём это ваше ошибочное мнение — не только ваше. Все так думают(или думали). Я не исключение.
SLEDopit писал(а):
29.05.2014 00:21
имхо, так проще всего.

так проще однострок написать, но мне удобнее цельный скрипт на одном ЯП (я выше на sed сделал, но это не принципиально), такой скрипт очень удобно сделать командой, и юзать как фильтр, или ещё как.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Re: Парсить csv и заносить в mysql

Сообщение nerve » 02.06.2014 17:40

Парни, еще такой вопрос в продолжение темы:
-исходный csv файлик имеет ограничение на количество событий: 10000 строк. Поэтому скормив его в базу единожды, следующий раз я могу получить этот файл или с полностью новыми событиями (строками) или со смещенными событиями, то есть старые снизу удаляются, а новые сверху дописываются - зависит от того, через какое время я его возьму.
Перед занесением в базу я переворачиваю строки наоборот.
Как сделать так, чтоб в базу заносились (добавлялись) только новые (уникальные) события?

upd.
может это и все что надо сделать? у меня уникальные значения - это дата.

Код: Выделить всё

ALTER TABLE `checkpoint`
ADD UNIQUE INDEX `uniq_date` (`date`);

соответственно если делать

Код: Выделить всё

INSERT INTO checkpoint (date,direction,user_id) VALUES ('$date', '$direction', '$user');

то даже если в исходном файле присутствуют строки. которые уже были скормлены в базу, то теперь они будут пропускаться?
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4666
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Парсить csv и заносить в mysql

Сообщение SLEDopit » 02.06.2014 18:06

man mysql replace.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:

azsx
Сообщения: 2877
ОС: calculate linux, debian, ubuntu

Re: Парсить csv и заносить в mysql

Сообщение azsx » 02.06.2014 23:12

Это далеко не все параметры. Есть ещё такой, например, как читаемость...

мне вот к примеру малочитаемопонятен как код на сед, так и код на си...
Спасибо сказали:

Аватара пользователя
Bizdelnick
Модератор
Сообщения: 15818
Статус: grammatikführer
ОС: Debian GNU/Linux

Re: Парсить csv и заносить в mysql

Сообщение Bizdelnick » 03.06.2014 10:56

azsx писал(а):
02.06.2014 23:12
мне вот к примеру малочитаемопонятен как код на сед, так и код на си...

Когда код на Си малопонятен - это быдлокод. Когда код на sed малопонятен - это норма.
Пишите правильно:
в консоли
вкупе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:

Аватара пользователя
tmp13
Сообщения: 986
ОС: openSuse 11.2

Re: Парсить csv и заносить в mysql

Сообщение tmp13 » 04.06.2014 10:29

От делать нех...

Код: Выделить всё

cat awk_test.txt |grep -e 'In ' -e 'Out '|grep -v "Not Found"|tr -d '()'| awk -F [,\ ] '{print "INSERT INTO checkpoint (date,direction,user) VALUES (\x27" $1" "$2"\x27,\x27"$9"\x27,\x27"$13"\x27)"}'

Ну в grep -v надо добавить всё ненужное гавно которое там есть...
ну и есть еще пара неувязочек ну да фиг с ним=)
мб поможет) :ph34r:
Красных бей и белых бей!
Вот вам иерархия!
Я люблю тебя за это, милая моя,
Разудалая, хмельная мать моя – Анархия!
Спасибо сказали:

aleksnsk
Сообщения: 180

Re: Парсить csv и заносить в mysql

Сообщение aleksnsk » 04.06.2014 17:49

я не понимаю чем php-скрипт с mysql-db не устраивает?
из консоли ведь удобно запускать)
Спасибо сказали:

Аватара пользователя
nerve
Сообщения: 267
ОС: OpenBSD

Re: Парсить csv и заносить в mysql

Сообщение nerve » 22.07.2014 18:07

aleksnsk писал(а):
04.06.2014 17:49
я не понимаю чем php-скрипт с mysql-db не устраивает?
из консоли ведь удобно запускать)

php устроит. тем более что я сделал страничку на нем, где загружаю исходный файл и отдаю его на обработку башевскому скрипту, который парсит и заносит в БД.
но как на пхп распарсить, чтоб получить:
из
6/24/2014,16:54:34,Event,,,Door 1 - In Card #1511561799 Found (abu),
такое
2014-6-24 16:54:34,In,abu
я не знаю. пользуюсь скриптом из заголовка.
Спасибо сказали:

Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Парсить csv и заносить в mysql

Сообщение drBatty » 22.07.2014 23:26

Bizdelnick писал(а):
03.06.2014 10:56
azsx писал(а):
02.06.2014 23:12
мне вот к примеру малочитаемопонятен как код на сед, так и код на си...

Когда код на Си малопонятен - это быдлокод. Когда код на sed малопонятен - это норма.

ваша проблема, что вы не знаете языки. На самом деле, _любой_ код должен быть понятным.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:

Аватара пользователя
SLEDopit
Модератор
Сообщения: 4666
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Парсить csv и заносить в mysql

Сообщение SLEDopit » 23.07.2014 01:19

drBatty писал(а):
22.07.2014 23:26
На самом деле, _любой_ код должен быть понятным.
Ну-ну. Попробуйте на глаз, не читая комментарии и ошибки, сказать о чём этот код (:
Код на sed действительно тяжело поддаётся пониманию, даже если сталкиваешься с ним не раз в год, а через день. Речь идёт не о s/// конструкциях, разумеется.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали: