The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"разбить файл по вхождению"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"разбить файл по вхождению"  +/
Сообщение от Happy_demon email(ok) on 12-Май-09, 13:06 
Доброе время есть файл вида
>From mailsnarf fhdsjfhjkshdjkfhksdf
>hfjhsjkdfjksdjkf
>kjfkjsdkfjklsdf
>jkfjkdfkjsl
>fjkdjflsdfjl
>From mailsnarf kfjdkjfklsdf
>fsdhfjhsj
>uyduasudhasd

принцип я думаю понятен. собственно надо его разбить на несколько файлов. т.е. от первого вхождения "From mailsnarf" до второго - это файл номер раз, от второго до третьего - файл номер два и т.д. количество вхождений заранее неизвестно. желательно на шел, греп, авк, сэд, но и перл было бы неплохо.
Заранее спасибо

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "разбить файл по вхождению"  +/
Сообщение от Andrey Mitrofanov on 12-Май-09, 13:24 
info coreutils csplit
man csplit
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "разбить файл по вхождению"  +/
Сообщение от Andrey Mitrofanov on 12-Май-09, 13:27 
>от первого вхождения "From mailsnarf" до второго - это файл номер

И google.ru + split mbox file + ENTER - не оно(и) ?...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "разбить файл по вхождению"  +/
Сообщение от Happy_demon email(ok) on 12-Май-09, 14:12 
csplit похоже на то что нужно, но как я уже писал - количество вхождений неизвестно(
если набрать
> csplit -f mail ./mailsnarf '/^From mailsnarf/' {3}

то работает (но количество полученных файлов равно 5, ну это допустим логично)
а если поставить {*} - то пишет
> csplit: *}: bad repetition count

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "разбить файл по вхождению"  +/
Сообщение от Andrey Mitrofanov on 12-Май-09, 14:28 
>а если поставить {*} - то пишет
>> csplit: *}: bad repetition count

csplit ..... "{*}"

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "разбить файл по вхождению"  +/
Сообщение от Happy_demon email(ok) on 12-Май-09, 15:03 
>>а если поставить {*} - то пишет
>>> csplit: *}: bad repetition count
>
>csplit ..... "{*}"

[root@bc /usr/handmade/maillog_parser/111]# cat 1.sh
#!/bin/sh
csplit -f mail ./mailsnarf '/^From mailsnarf/' {*}

[root@bc /usr/handmade/maillog_parser/111]# ./1.sh
csplit: *}: bad repetition count

и если "{*}" - тоже самое (


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "разбить файл по вхождению"  +/
Сообщение от Andrey Mitrofanov on 12-Май-09, 15:04 
>>csplit ..... "{*}"

Юноша, кавычки видите? Выводы?? Завязывайте с FreeBSD.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "разбить файл по вхождению"  +/
Сообщение от Happy_demon email(ok) on 12-Май-09, 15:36 
>>>csplit ..... "{*}"
>
>Юноша, кавычки видите? Выводы?? Завязывайте с FreeBSD.

ну да, на линуксе строка csplit mailsnarf '/^From mailsnarf/' {*} отрабатывает без вопросов. Но мне надо именно на freebsd 6.2-RELEASE-p8


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

8. "разбить файл по вхождению"  +/
Сообщение от Andrey Mitrofanov on 12-Май-09, 16:14 
>Но мне надо именно на freebsd 6.2-RELEASE-p8

Вариант АДЫН ("так вот ты какой" цвето^W труЪ юниксвей): городить скрипты/подпорки на "честном" шеле и "честном" csplit.

Вариант ДФА, не труЪ: поставить (пакет?) GNU coreutils и "просто" пользовать gcsplit (?или как они его там перекрестили).

Вариант ТРЫ, программерский: написать на $вставить_по_вкусу.

Вариант ЧОТЫРЫ, интернетовский: см.выше, со слов google.ru

Вариант ШЕСТЬ, обходной: не пользовать mbox, пользовать Maildir.

Вариант ПЪЯТ: intersiouly left blank тутмоглабыбть и проч. ...

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

13. "разбить файл по вхождению"  +/
Сообщение от allez (ok) on 14-Май-09, 06:09 
>Но мне надо именно на freebsd 6.2-RELEASE-p8

В man split есть упоминание опции -p? Гляньте на досуге... ;-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

14. "разбить файл по вхождению"  +/
Сообщение от Andrey Mitrofanov on 14-Май-09, 11:15 
man split есть упоминание опции -p? Гляньте на досуге... ;-)

Юниксвей наносит ответный удар... http:/man.shtml?topic=split&category=1&russian=1 Они специально "отступали" от Святого Писания Позикса в _противоположную_ нечестивому учению GNU сторону? Ну, и маладцы.

В хэндбуке описаны
http:/openforum/vsluhforumID9/7769.html#6
и эти догматы и правоверные отступления от
http:/openforum/vsluhforumID9/7769.html#9
Писания, я надеюсь? %-)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "разбить файл по вхождению"  +/
Сообщение от JohnProfic on 13-Май-09, 00:09 
>количество вхождений заранее неизвестно. желательно на шел, греп, авк, сэд, но
>и перл было бы неплохо.
>Заранее спасибо

Перл не знаю, потому "GNU Awk 3.0.4". По идее ничего ГНУсного здесь не используется, да и gawk --posix отрабатывает нормально.

BEGIN {
    fni = 0
    fnp = "test"
    fns = ".txt"
}
/^From mailsnarf/ {
    if (length(chunk)) {
        print chunk > fnp fni fns
        ++fni
    }
    print "Chunk " fni
    chunk = $0
    next
}
{
    chunk = chunk "\n" $0
}
END {
    if (length(chunk)) {
        print chunk > fnp fni fns
    }
}

Юзать: awk -f file.awk < file-with-froms
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

10. "разбить файл по вхождению"  +/
Сообщение от Happy_demon email(ok) on 13-Май-09, 17:25 
>>количество вхождений заранее неизвестно. желательно на шел, греп, авк, сэд, но
>>и перл было бы неплохо.
>>Заранее спасибо
>
>Перл не знаю, потому "GNU Awk 3.0.4". По идее ничего ГНУсного здесь
>не используется, да и gawk --posix отрабатывает нормально.

) вы будете смеяться - даже под виндой C:\Program Files\GnuWin32\bin>gawk.exe -f file.txt < 1.txt работает , а под фрёй - нет(
>[root@bc /usr/handmade/maillog_parser/111]# awk -f file.awk < mailsnarf
>awk: syntax error at source line 8 source file file.awk
> context is
>                        print chunk > fnp >>>  fni <<<  fns
>awk: illegal statement at source line 9 source file file.awk
>awk: syntax error at source line 20 source file file.awk

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

11. "разбить файл по вхождению"  +/
Сообщение от JohnProfic on 13-Май-09, 18:28 
>[оверквотинг удален]
>>Перл не знаю, потому "GNU Awk 3.0.4". По идее ничего ГНУсного здесь
>>не используется, да и gawk --posix отрабатывает нормально.
>
>) вы будете смеяться - даже под виндой C:\Program Files\GnuWin32\bin>gawk.exe -f file.txt < 1.txt работает , а под фрёй - нет(
>[root@bc /usr/handmade/maillog_parser/111]# awk -f file.awk < mailsnarf
>awk: syntax error at source line 8 source file file.awk
> context is
>                        print chunk > fnp >>>  fni <<<  fns
>awk: illegal statement at source line 9 source file file.awk
>awk: syntax error at source line 20 source file file.awk

Если верить этому (http://www.opennet.me/man.shtml?topic=awk&category=1&russian=1):
The print statement prints its arguments on the standard output (or on a file if >file or >>file is present or on a pipe if |cmd is present), separated by the current output field separator, and terminated by the output record separator. file and cmd may be literal names or PARENTHESIZED expressions; identical string values in different statements denote the same open file. The printf statement formats its expression list according to the format (see printf(3)). The built-in function close(expr) closes the file or pipe expr. The built-in function fflush(expr) flushes any buffered output for the file or pipe expr.
попробуйте:

print chunk > (fnp fni fns)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

12. "разбить файл по вхождению"  +/
Сообщение от Warhead Wardick on 13-Май-09, 21:46 
Ну блин - ну когда народ начнёт читать маны?
А не приводить "доказательство" в виде "а вот у меня в винде ..." ????
Причём тупо не видя что даже "у них в винде" __G__awk.exe - скорее всего порт GNU awk'а, а не оригинального :(

>>) вы будете смеяться - даже под виндой C:\Program Files\GnuWin32\bin>gawk.exe -f file.txt < 1.txt работает , а под фрёй - нет(

Будем мы смеятся, будем. Но вот только над тобой :)

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

15. "разбить файл по вхождению"  +/
Сообщение от Happy_demon email(??) on 14-Май-09, 13:20 
>попробуйте:
>
print chunk > (fnp fni fns)

Спасибо, помогло

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру