LinuxForum.Fans
Тема

Умеет ли sed такое: выбор из файла определенного количества строк?

Автор: valet 9 сообщений 4026 просмотров
#297698

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

С помощью grep как я понял можно так:

text
grep -m 3 'regexp' file

Это выберет из файла file только 3 первых совпадения строк с regexp. Но проблема в том что на огромном файле grep работает ну просто жутко медленно. У меня файл на 20 млн. строк, так эта конструкция за несколько часов обработала только что-то 30 тыс. строк.

В sed есть такое:

text
sed -n '/regexp/p'

Но это выберет все строки, совпадающие с regexp. Подозреваю, что возле p можно что-то прописать, чтобы получить например только 3 первых совпадения, но в манах нигде об этом ничего нету, сам тоже не могу ничего подобрать.

Просьба откликнуться знатоков sed'а, возможно ли такое?

Если нельзя это в sed'е, то где еще можно это попробовать и как?

#297700
text
sed -n '/regexp/p'|head -3

покажет первые 3 строчки
еще вариант, работает быстрей чем первый

text
sed  -n '/regexp/p;3q'
#297703

"i2ks" написал:
sed  -n '/regexp/p;3q'
Круто, то что надо, работает. Спасибо
Еще бы знать как это интерпретировать для общего развития :). Ну p - печать как бы, а это
text
;3q

собственно что?

#297706

"valet" написал:
собственно что?
да, именно это выводит первые 3 строки и все. Аналог head -3
А так, почитай, кодировка koi-8r
#297711

"i2ks" написал:
да, именно это выводит первые 3 строки и все. Аналог head -3
Я это понял, но как интерпретировать именно каждый символ по отдельности:
";" - что это значит
"3" - понятно
"q" - что это ?

"i2ks" написал:
А так, почитай, кодировка koi-8r
самое смешное, что читал, но ничего там подобного не находил. Правда конечно не читал все, но искал довольно обильно...
#297713
"valet" написал:
самое смешное, что читал, но ничего там подобного не находил. Правда конечно не читал все, но искал довольно обильно...

ну вот, приехали: http://ru.wikipedia.org/wiki/Sed , раздел Ссылки ;-)

#297715

"i2ks" написал:
ну вот, приехали: http://ru.wikipedia.org/wiki/Sed , раздел Ссылки ;-)
Ага, спасибо конечно :)), может сразу на гугл ссылку дать...
Где конкретно написано про "q" и ";", по конкретнее пожалуйста :)

П.С. Кстати sed тоже делает это медленно, решил задачу переформулировкой условия :), н овсе же про sed более чем интересно на будущее.
#297719
"valet" написал:
Где конкретно написано про "q"


Выборочная печать некоторых строк:
Печатать первые 10 линий файла (эмуляция "head"):
sed 10q
Печатать первую строку файла (эмуляция "head -1"):
sed q

; - емнип, в данном случае просто разделитель и не более того, как то так.

#297745
"valet" написал:
"q" - что это ?

http://www.opennet.ru/man.shtml?topic=sed&category=1&russian=0

q
Немедленное выход из сценария sed без дальнейшей обработки любого ввода, за исключением автовывода, если он не отключен. В этом случае будет распечатан текущий набор шаблонов.

http://www.lissyara.su/doc/programming/sed/

(1)q Выходит из sed.
Войдите или зарегистрируйтесь, чтобы ответить.