Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11678
Последний выпуск: 19.06.2015

Разбить текстовый файл на части консольными утилитами linux (sed, awk, ...)

388
18 января 2013 года
grgdvo
322 / / 04.07.2007
Есть некоторый текстовый файл - результат работы некоторой вычислительной программы. Файл большой (10Мб и больше). Файл имеет простую блочную структуру

 
Код:
*** BLOCK 1 ***
Iter=XXX TimeDiff=YYY
...
*** BLOCK 2 ***
...
Нужно этот файл разбить на части по-блочно, чтобы каждый блок помещался в свой отдельный файл (пусть этот отдельный байл имеет название "BLOCK 1").
Хочу сделать это средствами утилит linux (sed, awk и иже с ними).

Вопрос №1. Возможно ли это сделать средствами только одного sed? Я имею небольшой опыт составления скриптов на sed и уперся в проблему, что команде записи в файл шаблонной области "w filename" нельзя filename подсунуть как переменную, либо как какую-то подстановку, полученную из обрабатываемого текста. Возможно мунто объяснил, но хотелось бы, чтобы когда нашел регулярным выражение начало блока, то из него можно было выдрать слова "BLOCK 1" и именно это значение подсунуть потом в "w". Можно ли так в sed извратиться? Знатоки, подскажите, пожалуйста! Естественно за меня писать ничего не нужно, хотя бы натолкните на мысль, а я уже дальше разберусь.
Вопрос №2. Всегда считал что awk больше подходит для обработки таблично-структуриванных данных. Поэтому вопрос, можно ли подогнать awk под такую задачу? Опыт работы с awk минимальный, на уровне "cat aaa | awk -e '{print $2} > bbb'. Может быть кто-то подкинет подходящий пример, а дальше я уже разберусь.
Вопрос №3. В силу незнания, я могу упускать какую-то важную утилиту! стандартную! Какую? Если вы считаете, что такая есть, пожалуйста, сообщите название - я с ней разберусь.

И вместо заключения.
Подобных файлов у меня сотни. Глобальная задача - автоматизировать выдирание TimeDiff для последующего статистического анализа.
Я могу решить данную задачу, написав на C++ или даже на bash'e (если напрячься, то и на perl и если очень-очень напрячься, то и на python), но все же мне кажется, что структура файлов НЕ ТАКАЯ сложная, чтобы задействовать возможности императивных и скриптовых языков. Поэтому, просьба, не нужно советовать использовать выскоуровневые языки! Я и так знаю, что можно. Также не хотелось бы использовать специфичные библиотеки и пакеты из разряда template engine или template processing. Мне будет проще на C++ решить эту задачу, чем изучать незнакомый для меня пакет.

Если кто-то может дельно ответить на указанные три вопроса - заранее благодарен!
Если никто не ответит, придется написать на C++.
318
18 января 2013 года
P*t*
474 / / 15.02.2007
sed нормально не умею использовать.

На awk пишется в две строчки:
 
Код:
/BLOCK/ { f="block"$3".data" }
/Iter/ { print substr($2, 10) > f }
388
20 января 2013 года
grgdvo
322 / / 04.07.2007
Цитата: P*t*

На awk пишется в две строчки:


Суть уловил, заточу под себя.
Огромное спасибо!

388
22 января 2013 года
grgdvo
322 / / 04.07.2007
Цитата: P*t*
На awk пишется в две строчки:



P*t*, не буду плодить лишнюю тему, спрошу здесь!
Я свою задачу решил. awk - вещь!! Еще раз спасибо, проникся!! Хочу узнать лучше.
Какую нормальную книжку посоветуете прочитать, так сказать, на досуге??
Я пока пользовался info awk - в принципе для моей "фанарной" задачи хватило.
Вот присматриваюсь к Gawk: Effective AWK Programming

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог