The OpenNET Project / Index page

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

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

"Редактирование большого файла"  –1 +/
Сообщение от microbash (??) on 27-Май-10, 12:15 
Как бы отредактирвоать большой файл (100Гб) ?
Требуется заменить один байт на другой по всему файлу.

Вроде может sed 's/1/4/g' test.log
Но он не сохраняет результат в исходном файле.

Хелп.

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

Оглавление

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


1. "Редактирование большого файла"  +/
Сообщение от phpcoder email(??) on 27-Май-10, 12:18 
>Как бы отредактирвоать большой файл (100Гб) ?
>Требуется заменить один байт на другой по всему файлу.
>
>Вроде может sed 's/1/4/g' test.log
>Но он не сохраняет результат в исходном файле.

В Linux сохраняет, если вызван с ключиком -i


Но, ещё рекомендую попробовать тоже самое проделать с помощью Perl:

perl -pi -e 's|1|4|g' test.log (пишу по памяти)

Есть вероятность, что Perl справиться с этим быстрее (плюс он более портабельный)

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

3. "Редактирование большого файла"  +/
Сообщение от microbash (??) on 27-Май-10, 12:36 
>[оверквотинг удален]
>
>В Linux сохраняет, если вызван с ключиком -i
>
>
>Но, ещё рекомендую попробовать тоже самое проделать с помощью Perl:
>
>perl -pi -e 's|1|4|g' test.log (пишу по памяти)
>
>Есть вероятность, что Perl справиться с этим быстрее (плюс он более портабельный)
>

Спасибо. Буду пробовать.
А не подскажите мне как бы сначала найти все строки в файле по заданной последовательности?
Хочетсья сначала посмотреть все строки, что буду редактировать.

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

4. "Редактирование большого файла"  +/
Сообщение от phpcoder email(??) on 27-Май-10, 12:38 
>А не подскажите мне как бы сначала найти все строки в файле
>по заданной последовательности?

Чтобы искать в файле, используйте grep. (А лучше даже fgrep, если ищете не по регулярному выражению.) Вот только не понял, что вы имели ввиду под "по заданной последовательности"?


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

6. "Редактирование большого файла"  +/
Сообщение от microbash (??) on 27-Май-10, 16:02 
>>А не подскажите мне как бы сначала найти все строки в файле
>>по заданной последовательности?
>
>Чтобы искать в файле, используйте grep. (А лучше даже fgrep, если ищете
>не по регулярному выражению.) Вот только не понял, что вы имели
>ввиду под "по заданной последовательности"?

Помогите написать команду плз на sed:
требуется в большом файле сделать замену (строка содержит кавычки, $ и пробелы)
перед ENABLE двойной пробел, в других местах обычный

было: ALTER TRIGGER "MAIL$_0"  ENABLE
стало: ALTER TRIGGER "MAIL$_0"  ENOBLE

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

8. "Редактирование большого файла"  +/
Сообщение от microbash (??) on 27-Май-10, 19:22 
>[оверквотинг удален]
>>не по регулярному выражению.) Вот только не понял, что вы имели
>>ввиду под "по заданной последовательности"?
>
>Помогите написать команду плз на sed:
>требуется в большом файле сделать замену (строка содержит кавычки, $ и пробелы)
>
>перед ENABLE двойной пробел, в других местах обычный
>
>было: ALTER TRIGGER "MAIL$_0"  ENABLE
>стало: ALTER TRIGGER "MAIL$_0"  ENOBLE

Задача в целом следующая:
довольно часто нужно подправлять дампы баз. дампы большие от 100гб. дампы бинарные. однако ручное подправление нужных байтов их не портит.
нужно:
1) найти в файле нужное место,
2) подправить несколько байт,
3) найти это же место в файле и проверить, что исправление внесено.

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

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

9. "grep и dd"  +/
Сообщение от Вова on 27-Май-10, 22:45 
>1) найти в файле нужное место,
>2) подправить несколько байт,
>3) найти это же место в файле и проверить, что исправление внесено.
>
>
>т.к. файлы большие и располагаются как правило на медленных рейдовых корзинках, то
>не хотелось бы чтобы утилита их копировала для своих нужд.

сед и перл не подойдут в случае уже имеющихся дампов; вообще хорошо было бы при получении дампов пропускать через трубу, то есть хорошо было бы знать, что именно придётся подправлять, но если уже имеется 100гиговый файл на партиции в 101 гиг работать можно только через циклическое определение места правки через вызов grep -ab (трактовать текстом и писать байтовые смещения) и собственно редактирование при помощи  dd с опциями seek смещение  и notrunc.

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

2. "Редактирование большого файла"  +/
Сообщение от microbash (??) on 27-Май-10, 12:32 
на линуксе работает с -i
на фре это не работает почемуто

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

5. "Редактирование большого файла"  +/
Сообщение от phpcoder email(??) on 27-Май-10, 12:39 
>на линуксе работает с -i
>на фре это не работает почемуто

Потому что это не стандартная опция (читай: нет в POSIX), а в Линуксе сделана для удобства. (Я не спроста выше написал, что Perl более портабелен.)

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

7. "Редактирование большого файла"  +/
Сообщение от svn (??) on 27-Май-10, 16:53 
>на линуксе работает с -i

Работает создавая новый файл который в конце затирает источник.
Не совсем то, что хотел автор...


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

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

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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