sed+LOAD DATA INFILE (Вопрос по Mysql)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

aka
Сообщения: 171

sed+LOAD DATA INFILE

Сообщение aka »

Уважаемые, есть такой вопрос.Необходимо содержимое одного файла загнать в базу.Все в приницпе неплохо, поля разделены ; загружается вроде все корректно, Но так же загружает в базу и заголовки таблиц.Как сделать, что бы загружались только данные?В приницпе перерыв все по синтаксису данной команды нашел только ignore, и насколько я понял через него можно задать какую строку пропусть...и это не совсем то...
Мой блог -- unixway.info --
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sed+LOAD DATA INFILE

Сообщение sash-kan »

так удалите заголовки. прежде чем загружать.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sed+LOAD DATA INFILE

Сообщение sash-kan »

aka писал(а):
08.05.2009 14:20
и это не совсем то
да. потому что «то» звучит иначе:
ignore <количество> lines
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
aka
Сообщения: 171

Re: sed+LOAD DATA INFILE

Сообщение aka »

sash-kan писал(а):
08.05.2009 15:05
так удалите заголовки. прежде чем загружать.


С удовольствием, но они повторяются довольно таки часто.Если натолкнете на мысль как автоматизировать процесс удаления, буду благодарен.


sash-kan писал(а):
08.05.2009 15:26
aka писал(а):
08.05.2009 14:20
и это не совсем то
да. потому что «то» звучит иначе:
ignore <количество> lines


Ага, уже дошел до этого:)Повторюсь, что данные заголовки встречаются по всему загружаемому файлу.
Мой блог -- unixway.info --
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: sed+LOAD DATA INFILE

Сообщение Frank »

man sed
man awk
Мускулю вы никак не объясните чего вом надо, т.к. с его точки зрения, заголовки ничем не отличаются от остальных данных - те же буквы/цифры между разделителем.
Изображение
Спасибо сказали:
aka
Сообщения: 171

Re: sed+LOAD DATA INFILE

Сообщение aka »

Frank спасибо за совет.У меня еще есть последняя надежда:)Может быть все таки эти заголовки как то выделены?Как можно проверить?Имеется ввиду какими знаками, которые не видны при чтении.
Мой блог -- unixway.info --
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sed+LOAD DATA INFILE

Сообщение sash-kan »

я смотрю hexdump-ом или даже просто в vim-е.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: sed+LOAD DATA INFILE

Сообщение sim1 »

а вариант загрузить все с заголовками, а потом с помощью SQL выражений их удалить ?
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sed+LOAD DATA INFILE

Сообщение sash-kan »

sim1
а разница в чём?
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
sim1
Сообщения: 155
ОС: GNU,BSD

Re: sed+LOAD DATA INFILE

Сообщение sim1 »

(aka @ May 8 2009, в 16:03) писал(а):С удовольствием, но они повторяются довольно таки часто.Если натолкнете на мысль как автоматизировать процесс удаления, буду благодарен.

В этом случае удалить заголовки можно:
1. Перед вставкой в базу с помощью sed, awk, как предложил Frank.
2. После того, как данные попали в базу c помощью SQL выражений(я);
sash-kan писал(а):
08.05.2009 22:22
sim1
а разница в чём?

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

Re: sed+LOAD DATA INFILE

Сообщение aka »

sim1 писал(а):
08.05.2009 23:10
(aka @ May 8 2009, в 16:03) писал(а):С удовольствием, но они повторяются довольно таки часто.Если натолкнете на мысль как автоматизировать процесс удаления, буду благодарен.

В этом случае удалить заголовки можно:
1. Перед вставкой в базу с помощью sed, awk, как предложил Frank.
2. После того, как данные попали в базу c помощью SQL выражений(я);
sash-kan писал(а):
08.05.2009 22:22
sim1
а разница в чём?

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



Спасибо за советы.Думаю действительно загружать все в базу а потом запросами удалять сразу.Походу возник вопрос.Загружаю таким образом

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

LOAD DATA LOCAL INFILE '/home/user/calls/calls123.txt' INTO TABLE calls FIELDS TERMINATED BY ';'

У меня есть несколько файлов, которые будут каждый месяц изменяться в названии.Как сделать загрузку примерно след образом?

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

LOAD DATA LOCAL INFILE '/home/user/calls/*' INTO TABLE calls FIELDS TERMINATED BY ';'
Мой блог -- unixway.info --
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: sed+LOAD DATA INFILE

Сообщение IMB »

aka писал(а):
12.05.2009 18:44
Спасибо за советы.Думаю действительно загружать все в базу а потом запросами удалять сразу.

Сложно как-то, http://dev.mysql.com/doc/refman/5.1/en/load-data.html . Обратите внимание на IGNORE.
aka писал(а):
12.05.2009 18:44
У меня есть несколько файлов, которые будут каждый месяц изменяться в названии.Как сделать загрузку примерно след образом?

Цикл на любом языке - shell, php и т.д.
Спасибо сказали:
aka
Сообщения: 171

Re: sed+LOAD DATA INFILE

Сообщение aka »

IMB писал(а):
12.05.2009 19:33
Сложно как-то, http://dev.mysql.com/doc/refman/5.1/en/load-data.html . Обратите внимание на IGNORE.

IGNORE однозначно не то, птму как структура файла не совсем четко структурирована.Поэтому решил все таки взяться за sed,и дошел до самого сложного.Постараюсь изложить.

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

пустая строка
число 1
пустая строка
данные;через;точку;с запятой
пустая трока
число 2
Данные


Смысл заключается в том, что нужно выдергивать число 1 например, и вставлять его в начале каждой строки до след числа 2,ну или просто до следующей пустой строки.Есть идеи?Может, гуру по sedу найдется:)Спс
Мой блог -- unixway.info --
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed+LOAD DATA INFILE

Сообщение drBatty »

aka писал(а):
15.05.2009 10:35
Смысл заключается в том, что нужно выдергивать число 1 например, и вставлять его в начале каждой строки до след числа 2,ну или просто до следующей пустой строки.Есть идеи?Может, гуру по sedу найдетсяsmile.gifСпс

$

$ sed '' mysql.txt 123 x;y;z;t 343 a;b;c;d 12 a $ sed -r ' /^$/b /^[0-9]+$/ {h; b} G s/(.+)\n(.+)/\2 \1/ ' mysql.txt 123 123 x;y;z;t 343 343 a;b;c;d 12 12 a


пустые строки я игнорирую. (/^$/b)
строки где только число я сохраняю в HS(/^[0-9]+$/ {h; b})
ну а перед всеми остальными я вставляю сохранённое число, и пробел

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

G#берём сохранённое число из HS
s/(.+)\n(.+)/\2 \1/#получается 2 строки: первая та что прочиталась, вторая -это число, ставлю сначала число(\2), затем пробел, а затем строку.


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

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

Re: sed+LOAD DATA INFILE

Сообщение aka »

drBatty супер:)Спасиб огромное.Если подскажите как же мне все таки удалить потом еще и эти число1,число2...
Почему то вот так не срабатывает вообще.

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

sed -r '/^$/d
/^[67][0-9]+$/ {h; b}
G
s/(.+)\n(.+)/\2;\1/
s/^[67][0-9]*; //
s/^$[67][0-9]* // calls3.txt >call1234.txt

Крутил уже по разному!
Мой блог -- unixway.info --
Спасибо сказали:
Аватара пользователя
Frank
Сообщения: 1059
ОС: Ubuntu, Debian

Re: sed+LOAD DATA INFILE

Сообщение Frank »

Похоже, ты таки не прочитал man sed :) Так же рекомендую почитать man regex
В кратце: третий и четвёртый sed у тебя удаляют только первую строку из цифр с точкой запятой и/или пробелом за ними.
Изображение
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sed+LOAD DATA INFILE

Сообщение sash-kan »

aka писал(а):
15.05.2009 16:48
как же мне все таки удалить потом еще и эти число1,число2
замените «h;b» на «h;D». примерно так:

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

$ sed '/^$/b;/^[[:digit:]]\+$/{h;D};G;s/\(.*\)\n\(.*\)/\2 \1/' file
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed+LOAD DATA INFILE

Сообщение drBatty »

aka писал(а):
15.05.2009 16:48
s/^[67][0-9]*; //
s/^$[67][0-9]* // calls3.txt >call1234.txt

1) комментарии в sed пишутся за #
2)[67] - значит "либо символ 6, либо 7". Вы хотите 7 или 6 цифр?
тогда так: ^[0-9]{6,7}$
3)^ означает начало строки
4)$ конец строки
5) ^$ означает начало, и после него конец, ака "пустая строка"
sash-kan писал(а):
15.05.2009 23:34
$ sed '/^$/b;/^[[:digit:]]\+$/{h;D};G;s/\(.*\)\n\(.*\)/\2 \1/' file

жуть
:)
это RE, классические регулярные. тут перед каждым(почти) метасимволом надо ставить \
И без того уродливые и непонятные RE, становятся совсем жуткими...
Я предпочитаю использовать ключ -r, и ERE.
Кроме того, конструкция [[:digit:]] может и труЪ, но имхо, [0-9] более ясно, и попроще.

sash-kan, спасибо. Хотя смысл вашего выражения для меня неясен, надо бы его переписать в человеческий вид...

aka писал(а):
15.05.2009 16:48
Если подскажите

вы знаете, дайте файл - "как было", и "что должно быть"
а то не слишком понял задачу...

sash-kan писал(а):
15.05.2009 23:34
замените «h;b» на «h;D». примерно так:

а, понял...
ну вы и закрутили...
а почему не d? Я бы тут лучше бы написал перед b(которое вы заменили на D)

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

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sed+LOAD DATA INFILE

Сообщение sash-kan »

drBatty писал(а):
16.05.2009 07:26
Я предпочитаю использовать ключ -r, и ERE.
дело вкуса и привычки.

drBatty писал(а):
16.05.2009 07:26
Кроме того, конструкция [[:digit:]] может и труЪ, но имхо, [0-9] более ясно, и попроще.
привычка. слишком часто приходится использовать классы (man 7 regex).

drBatty писал(а):
16.05.2009 07:26
а почему не d?
в данном случае d и D взаимозаменяемы.

drBatty писал(а):
16.05.2009 07:26
Я бы тут лучше бы написал перед b
s/.*//
требуется же _удалить_ строку с номером, а не очистить её содержимое.

drBatty писал(а):
16.05.2009 07:26
ну вы и закрутили...
просто продемонстрировал немного иной синтаксис.

drBatty писал(а):
16.05.2009 07:26
тут перед каждым(почти) метасимволом надо ставить \
давайте будем более точными.
$ info sed Extended
The only difference between basic and extended regular expressions is in
the behavior of a few characters: `?', `+', parentheses, and braces
(`{}'). While basic regular expressions require these to be escaped if
you want them to behave as special characters, when using extended
regular expressions you must escape them if you want them _to match a
literal character_.
шило на мыло, как говорится. в общем, дело привычки.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed+LOAD DATA INFILE

Сообщение drBatty »

sash-kan писал(а):
16.05.2009 14:06
дело вкуса и привычки.

конечно.
sash-kan писал(а):
16.05.2009 14:06
привычка. слишком часто приходится использовать классы (man 7 regex).

ясно... А что вы скажете на счёт \W \w? (и как там, [[:alnum:]])... И насчёт русского UTF-8?

Shell

$ sed -r 's/^\w{4}$/FOUND/ ффф ффф фффф FOUND

У меня работает... Будет ли работать везде, где UTF-8 и русская локаль? Пугает то, что "фффф" это вообще-то 8 байт...

sash-kan писал(а):
16.05.2009 14:06
в данном случае d и D взаимозаменяемы.

угу... d очищает буфер, D удаляет последнюю строку. В любом случае ничего не выводится. Беда в том, что логика работы нарушена... У меня 3 альтернативы, и выполняются 3 действия:
if(...)
{}
else if(...)
{}
else
{}
а вы мне последнее else убрали, впрочем - и так работает :)

sash-kan писал(а):
16.05.2009 14:06
требуется же _удалить_ строку с номером, а не очистить её содержимое.

я так подозреваю, что требуется только не пустые строки выводить, и без чисел.
тут бы надо ключ -n, и модификатор p, к команде замены...

Shell

$ sed -nr /^$/b /^[0-9]+$/ {h; b} G s/(.+)\n(.+)/\2 \1/p ' mysql.txt 123 x;y;z;t 343 a;b;c;d 343 eee;rt 12 a

вот так вот к примеру...
sash-kan писал(а):
16.05.2009 14:06
давайте будем более точными.
$ info sed Extended

не буду спорить. длинна кода и степень понимания - субъективно. Я уже заметил, что многие ставят * там, где по логике должен быть +, потому-лишь, что + надо экранировать. Но думаю для новичка будет понятнее ERE, а это ценный новичёк, раз уже с sed разбирается, это не убунтовец уже 2 дня как, которого можно с чистой совестью послать на в гугл обратно в систему для домохозяек ;)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sed+LOAD DATA INFILE

Сообщение sash-kan »

drBatty писал(а):
16.05.2009 19:40
А что вы скажете на счёт \W \w? (и как там, [[:alnum:]])
разве я похож на Фридла? могу сказать только одно: \w и [:alnum:] — не совсем идентичные множества.

drBatty писал(а):
16.05.2009 19:40
Будет ли работать везде, где UTF-8 и русская локаль?
локаль-то тут причём? представление символа никак не зависит от того, с какого дня начинается рабочая неделя.

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

$ echo щ | LANG=C sed 's/^.$/1/'
щ
$ echo щ | LANG=en_US.utf8 sed 's/^.$/1/'
1

накоторые классы — да, локалезависимы. но символы — они и в африке символы. сколько бы байт ни уходило на их представление.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
aka
Сообщения: 171

Re: sed+LOAD DATA INFILE

Сообщение aka »

Прошу прощения,что "пропал":)Вообщем благодаря вашим советам у меня получилось таки то что нужно:)Спасибо.Теперь бьюсь с переводом формата даты в этом же файле в мускульный вид.Пойду читать орейли "регулярные выражения":)
Мой блог -- unixway.info --
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sed+LOAD DATA INFILE

Сообщение sash-kan »

aka писал(а):
19.05.2009 16:11
с переводом формата даты в этом же файле в мускульный вид
а может, ничего переводить и не надо?
http://dev.mysql.com/doc/refman/5.1/en/datetime.html
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
aka
Сообщения: 171

Re: sed+LOAD DATA INFILE

Сообщение aka »

sash-kan писал(а):
19.05.2009 19:27
aka писал(а):
19.05.2009 16:11
с переводом формата даты в этом же файле в мускульный вид
а может, ничего переводить и не надо?
http://dev.mysql.com/doc/refman/5.1/en/datetime.html


Спасибо за ссылку.После прочтения задача упростилась.Теперь всего то нужно из dd.mm.yyyy сделать yyyy.mm.dd.Но все равно как то не дается.Будем дальше изучать тему:)
Мой блог -- unixway.info --
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed+LOAD DATA INFILE

Сообщение drBatty »

aka писал(а):
20.05.2009 12:34
из dd.mm.yyyy сделать yyyy.mm.dd

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

s/([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})/\3.\2.\1/

где-то была неплохая док про MySQL по русски, думаю, после её прочтения и этого будет не нужно :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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

Re: sed+LOAD DATA INFILE

Сообщение aka »

drBatty спасибище:)Все работает,только очень хотелось бы понять как.Не распишите, эту строку?Буду,очень благодарен:)

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

([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})
здесь задаем любое совпадение 0-9 и указываем, что это совпадение может состоять из одной либо двух цифр,либо четрых {4} чисел,также указываем \. как разделители, но не вкидываем в буфер(потому как за скобками).

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

/\3.\2.\1/
ну а тут просто меняем местами накопленное в буфере.

Правильно я все понял?:)
Мой блог -- unixway.info --
Спасибо сказали:
aka
Сообщения: 171

Re: sed+LOAD DATA INFILE

Сообщение aka »

Опять запнулся на таком вопросе.Есть структура

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

;1
;2
;3
;4
;5
;1
;2
;3
;4
;5

Не пойму как сдлеать так:

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

;1;2;3;4;5
;1;2;3;4;5

Не сочтите за наглость,но может все же кто подскажет,чуть:)Всю голову уже сломал:)
Мой блог -- unixway.info --
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: sed+LOAD DATA INFILE

Сообщение sash-kan »

aka писал(а):
25.05.2009 12:55
Не пойму как сдлеать так
формализуйте задачу — подскажем.
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: sed+LOAD DATA INFILE

Сообщение drBatty »

aka писал(а):
20.05.2009 12:55
drBatty спасибище:)Все работает,только очень хотелось бы понять как.Не распишите, эту строку?Буду,очень благодарен:)

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

([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})
здесь задаем любое совпадение 0-9 и указываем, что это совпадение может состоять из одной либо двух цифр,либо четрых {4} чисел,также указываем \. как разделители, но не вкидываем в буфер(потому как за скобками).

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

/\3.\2.\1/
ну а тут просто меняем местами накопленное в буфере.

Правильно я все понял?:)
у меня в профиле была чудная ссылочка на мой форум, там есть большая тема про sed...
а здесь её указывать я не хочу - реклама..

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

([0-9]{1,2})\.([0-9]{1,2})\.([0-9]{4})

(одна или две цифры)
потом точка
(потом опять одна или 2 цифры)
потом точка
(потом ровно 4 цифры)

Первое то что в скобках \1, второе \2 ит.д.
\3\2\1
это 4 цифры, потом сразу 1или2 цифры(что по серёдке), потом первые 2 или одна...
s - команда замены, а не обмена или накопления...
она ничего не копит.
если у вас в буфере
12.3.4567
то после этой замены будет
4567.3.12
а если будет 12.3.456, то так и останется, просто команда не найдёт нужное.

aka писал(а):
25.05.2009 12:55
Опять запнулся на таком вопросе.Есть структура
Код
;1
;2
;3
;4
;5
;1
;2
;3
;4
;5

не понятно...
ну так:

Shell

$ sed -r '/1/{N;N;N;N;s/\n//g}' st.txt ;1;2;3;4;5 ;1;2;3;4;5
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

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

Re: sed+LOAD DATA INFILE

Сообщение aka »

Привел я все примерно к такому виду:

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

;Иванов Иван
;7905627
;2009.31.01
;25.25
;Петров Петр Иванович
;7905362
;2009.31.01
;41.36

и так далее.
Мне необходимо Информацию о каждом человеке просто занести в одну строку,и удалить первую из повторяющихся строк по первыми двум значениям(но это потом наверное).

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

;Иванов Иван;7905627;2009.31.01;25.25
;Петров Петр Иванович;7905362;2009.31.01;41.36(Если повторилась первую удалить)
;Петров Петр Иванович;7905362;2009.31.01;256.05

Вот примерно такая задача.Это уже почти финиш ломания головы с регулярными выражениями)Если опять невнятно сформулировал:),готов еще раз:))
Мой блог -- unixway.info --
Спасибо сказали: