|
ru.unix- RU.UNIX ---------------------------------------------------------------------- From : Eugene Grosbein 2:5006/1 09 Aug 2007 17:26:49 To : Andrew Lutov Subject : Re: Обработка текстового файла --------------------------------------------------------------------------------
09 авг 2007, четверг, в 13:42 KRAST, Andrew Lutov написал(а):
EG>> Теоретически sed'ом, но сначала четкий критерий "кривости" строки в
EG>> студию.
AL> Строка оказывается разбита на несколько (в примере на три строки).
AL> Пример выше. Т.е. если "Hаправление" состоит HЕ из одного слова,
AL> то режется по пробелу с заменой пробела на перевод строки.
AL> Формат строки стандартный: [номер], дата, время, направление,
AL> межгород/международка, куда звонили, продолжительность, ХЗ, цена.
AL> Т.е. перед датой может быть номер, с которого был звонок, но он
AL> проставляется только в первой строке. Остальные строки, относящиеся
AL> к данному номеру, сам номер уже не содержат.
AL> Это входящий файл, который присылают.
Я скорее хотел спросить критерий "прямости" строки :-)
Видимо, можно сформулировать так: строка должна заканчиваться цифрой,
а все те, что до неё не заканчивались цифрой, её начало. Тогда так:
sed -E -f fix.sed < исходный_файл
А вот fix.sed:
:begin
/[0-9]$/bprint
N
s/\n/ /
bbegin
:print
n
bbegin
# EOF
Вначале имеем строку, проверяем - если кончается на цифру,
переходим к метке :print, где команда n выводит строку и возвращает
управление к началу :begin. Иначе команда N читает следующую строку,
добавляя её к имеющейся с разделителем \n, который следующая команда s
удаляет, далее управление возвращается опять к :begin. И так далее.
Eugene
--
- Локапалы непобедимы, - сказал Кубера, а девочка подняла кубик
и долго-долго разглядывала его, прежде чем назвать.
--- slrn/0.9.8.1 (FreeBSD)
* Origin: Svyaz Service JSC (2:5006/1@fidonet)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix/26093126a3f98.html, оценка из 5, голосов 10
|