вывод строки номер 100500 (без cat grep head tail)

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

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

pelmen
Сообщения: 1268
ОС: debian

вывод строки номер 100500

Сообщение pelmen »

Ребята, есть файл очень большой. Более двух Гб. Текстовый. Нужно выдирать периодически из него строку номер $NUMBER. Эта строка иногда в начале ($NUMBER<100500), иногда в середине(100500<$NUMBER<999999), иногда в конце(999999<$NUMBER. Можно делать head -n $NUMBER file|tail -n 1, но это мне кажется корявым исполнением, к тому же еще и длительным процессом. Как делают обычно? Что-то не нагуглил...
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: вывод строки номер 100500

Сообщение /dev/random »

sed -n "$NUMBER{p;q}"
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: вывод строки номер 100500

Сообщение pelmen »

а что такое p и q? Я в синтаксис не врубаюсь :) man не помог
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: вывод строки номер 100500

Сообщение /dev/random »

"p" - вывести, "q" - выйти (чтобы не читать остаток файла). Опция "-n" блокирует автоматический вывод, чтобы выводилось только то, что указано явно.

Учтите, что строки с первой по нужную всё равно будут прочитаны. Для простого текстового файла это неизбежно, т.к. неизвестно, с какого байта начинается нужная строка. Если вам нужно быстрее, то используйте более хитрый формат.
Спасибо сказали:
Аватара пользователя
eddy
Сообщения: 3321
Статус: Красный глаз тролля
ОС: ArchLinux

Re: вывод строки номер 100500

Сообщение eddy »

Советую завести отдельный — индексный — файл, куда скидывать позиции начала строк, скажем, с шагом в 100 или 1000. Потом проще будет вывести строчку N: делаем файлу lseek на нужную позицию, а потом ищем нужную строчку.
Будет намного шустрей.
RTFM
-------
KOI8-R - патриотичная кодировка Изображение
Спасибо сказали: