Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
alex 946 Гость
|
Добавлено: Пт Дек 21 2001 22:58 Заголовок сообщения: Знатоки awk и sed, помогите, если не трудно |
|
|
Надобно: Во все файлы из одной папки вставить содержимое файла ***, и заменить везде ВАСЯ на ПЕТЯ. Изменённые файлы положить в другую папку.
Используя sed, я смог легко разделатся с заменой. А вот вставка из файла идёт только на output а не в выходной файл. И вывести смог только в ОДИН файл. Длинный такой получился . Сделать вывод в файлы с такими же именами, как и входные не смог.
Используя awk, наоборот, легко сделал вывод "много на входе - много на выходе" (переменная FILENAME помогла), а вот с контекстной заменой застрял.
Пользовался литературой: sed и awk (учебное пособие) (с) А.Соловьев Язык обработки данных AWK, Галина О. В. Неинтерактивный текстовый редактор SED, Галина О. В.
Варианты: 1. Не то читал (или не всё) 2. Читал то но не понял. (тупой то есть) 3. Использовал не тот редактор. 4. Где-то есть грабли, о которых мне не известно.
Как победить?
Заранее спасибо. Даже если выяснится, что имеет место вариант 2. |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://www. Гость
|
Добавлено: Сб Дек 22 2001 14:40 Заголовок сообщения: А может, попробоваь перейти на Perl? |
|
|
На Perl такие вещи, как работа с кучей файлов и замена подстрок, делаются существенно проще - Perl как раз был написан человеком, которому не хватало возможностей AWK.
На Sed я бы организовал цикл средствами Shell (оператор foreach) по списку файлов и для каждого файла запускал бы свой Sed.
На AWK я бы попробовал функцию split(строка, массив, разделитель), где в качестве разделителя используется "ВАСЯ", а потом массив склеивается в цикле или сразу печатается с разделителем OFS="ПЕТЯ". |
|
Вернуться к началу |
|
|
alex 946 Гость
|
Добавлено: Сб Дек 22 2001 16:54 Заголовок сообщения: Спасибо. Пошёл думать. |
|
|
вот. |
|
Вернуться к началу |
|
|
ilyasov Гость
|
Добавлено: Вс Дек 23 2001 15:55 Заголовок сообщения: Re: А может, попробоваь перейти на Perl? |
|
|
Да не надо Perl! Именно и стоит использовать sh+sed (2-й совет Димы самый правильный). Получится дешево и сердито. Не люблю когда из пушки по воробьям... |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://www. Гость
|
Добавлено: Вс Дек 23 2001 18:05 Заголовок сообщения: Это не из пушки по воробьям, это с расчетом на будущее |
|
|
Если alex собирается и дальше двигаться в таком направлении, то очень скоро он, как и автор Perl, натолкнется на ограниченность Grep/Sed/AWK, только автору Perl пришлось написать этот самый Perl, а alex может воспользоваться готовым языком.
Учите Perl, alex, он золотой... |
|
Вернуться к началу |
|
|
alex 946 Гость
|
Добавлено: Вт Дек 25 2001 07:24 Заголовок сообщения: Вы оба правы... :) |
|
|
Начнём с того, что Perl ..обычно.. серверная приблуда. Для локальной задачи, причём узкоспециализированной, можно и sed'ом обойтись. Тем более, что у меня не UNIX a BeOS, то-есть Perl ещё прикрутить надо. А так... вы все правы, в общем. Кстати, это единственный форум, где ответили по-существу вопроса. |
|
Вернуться к началу |
|
|
ilyasov Гость
|
Добавлено: Вт Дек 25 2001 13:31 Заголовок сообщения: Ясно, что оба, поэтому и дополняем друг друга по необходимости (a'la Dmitry: empty) :) |
|
|
empty |
|
Вернуться к началу |
|
|
Dmitry.Karpov http://www. Гость
|
Добавлено: Чт Дек 27 2001 21:27 Заголовок сообщения: Perl был придуман задолго до серверов... |
|
|
Если внимательно покопать Perl, то будет видно, что его CGI-свойства реализуются через подключаемый модуль, а не встроены. Изначально Perl был предназначен для генерации отчетов по log-файлам или по другим файлам сообщений. |
|
Вернуться к началу |
|
|
|