Прочитать файл до определённой строки (Чем?)

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: Прочитать файл до определённой строки

Сообщение Dreamer77 »

Dreamer77 писал(а):
15.02.2011 13:44
Мне требуется возможность выделить блок данных между "solutiontime=xxx" и следующим "i=yyy" по входному указанию "xxx".

drBatty писал(а):
15.02.2011 14:54
sed -rn "/solutiontime=$xxx/,/i=[0-9]+/p" | sed -r '${ /i=[0-9]+/d; }'
так где я могу задать строчку "ХХХ"??

watashiwa_darede... писал(а):
15.02.2011 15:01
awk -v t=1e-3 '$0==("soulutiontime=" t){p=1}/^i=/{p=0}p{print}'
здесь ХХХ присутствует =)

но ни первый ни второй вариант не понимаю как работают=)
если не понимаю -- не могу использовать=) Разъясните пожалуйста, или пошлите туда, где мне помогут=)
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Прочитать файл до определённой строки

Сообщение drBatty »

Dreamer77 писал(а):
15.02.2011 15:44
так где я могу задать строчку "ХХХ"??

напишите перед командо
xxx=12345
или замените $xxx на 12345
Dreamer77 писал(а):
15.02.2011 15:44
но ни первый ни второй вариант не понимаю как работают=)

мою подпись читали?
sed -rn "/solutiontime=$xxx/,/i=[0-9]+/p" | sed -r '${ /i=[0-9]+/d; }'

кратко:
/X/,/Y/ это адресное выражение: от строки с X до строки с Y, p это команда, печать сокращённо. Беда этого скрипта в том, что он иногда захватывает ненужную i=324, потому вторая команда отрезает последнюю i=324, если она есть.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: Прочитать файл до определённой строки

Сообщение Dreamer77 »

drBatty
прошу прощения, голова уже не соображает -- на заметил то что вы написали.

в связи с выше сказанным есть следующие вопросы --
если надо прочитать до конца файла, то что надо изменить?

Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Прочитать файл до определённой строки

Сообщение drBatty »

Dreamer77 писал(а):
15.02.2011 16:38
в связи с выше сказанным есть следующие вопросы --
если надо прочитать до конца файла, то что надо изменить?

конец файла в sed это $
sed -n '/начало/,$ p'
или
sed '/начало/,$ ! d'
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: Прочитать файл до определённой строки

Сообщение Dreamer77 »

спасибо за помощь, почти во всем разобрался.
осталось понять как не писать первую строчку, по которой и происходит поиск.
или выводить ее с дополнительным "#" в начале строки
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
watashiwa_daredeska
Бывший модератор
Сообщения: 4038
Статус: Искусственный интеллект (pre-alpha)
ОС: Debian GNU/Linux

Re: Прочитать файл до определённой строки

Сообщение watashiwa_daredeska »

Dreamer77 писал(а):
15.02.2011 16:56
осталось понять как не писать первую строчку, по которой и происходит поиск.
awk -v t=1e-3 '/^i=/{p=0}p{print}$0==("soulutiontime=" t){p=1}'
Программа в развернутом виде:

user@localhost

# Изначально p=="", т.е. false. Программа обрабатывает по одной записи из файла, запись — строка. /^i=/ { p=0 } # Если строка начинается с "i=", то p=0 p {print} # Если p, печатаем строку $0==("soulutiontime=" t) { p=1 } # Если строка равна solutiontime=<заданное значение>, то p=1.

Параметром -v в awk задается значение переменной.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Прочитать файл до определённой строки

Сообщение drBatty »

Dreamer77 писал(а):
15.02.2011 16:56
осталось понять как не писать первую строчку, по которой и происходит поиск.

обычно пишется bash-скрипт, который читает командой read значение (с клавиатуры, или от другого скрипта), и потом выполняет sed или awk. Так получается проще всего ИМХО. Хотя я, помнится, даже гуй к sed привинтил (конечно, это просто пример, но иногда полезно - многие до ужаса боятся консоли).
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Ленивая Бестолочь
Бывший модератор
Сообщения: 2760
ОС: Debian; gentoo

Re: Прочитать файл до определённой строки

Сообщение Ленивая Бестолочь »

если кол-во данных всегда одно, то можно так:

Код: Выделить всё

grep 'i=XXX' -A4 /path/to/file| tail -3
Солнце садилось в море, а люди с неоконченным высшим образованием выбегали оттуда, думая, что море закипит.
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: Прочитать файл до определённой строки

Сообщение Dreamer77 »

watashiwa_darede..., спасибо, попробую!
решил почитать man awk и сразу же передумал -- 2500 строчек отпугивают=))

drBatty писал(а):
16.02.2011 10:44
обычно пишется bash-скрипт, который читает командой read значение (с клавиатуры, или от другого скрипта), и потом выполняет sed или awk. Так получается проще всего ИМХО.
Именно в этом направдении я и думаю. Когда будет больше времени -- обязательно напишу.

drBatty писал(а):
16.02.2011 10:44
Хотя я, помнится, даже гуй к sed привинтил (конечно, это просто пример, но иногда полезно - многие до ужаса боятся консоли).
спасибо, добавил в закладки -- почитаю на досуге.
Я не боюсь, а наоборот люблю.

Вот как только смогу в консоли делать почти все -- скажу прощай всем DE =)

Ленивая Бестолоч... писал(а):
16.02.2011 12:14
grep 'i=XXX' -A4 /path/to/file| tail -3
это что-то новое... надо попробовать.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Прочитать файл до определённой строки

Сообщение drBatty »

Dreamer77 писал(а):
16.02.2011 13:06
grep 'i=XXX' -A4 /path/to/file| tail -3
это что-то новое...

да всё тоже...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: