Все вышеперечисленные ответы прямо отвечают на вопрос.Но вот менее прямое решение, но потенциально более важная идея, чтобы вызвать мысль.
Поскольку длины строк произвольны, для чтения всех байтов файла до n-й строки требуется .Если у вас большой файл или вам нужно многократно повторять эту задачу, и этот процесс отнимает много времени, тогда вам следует серьезно подумать о том, следует ли вам в первую очередь хранить свои данные другим способом.
Реальным решением является наличие индекса, например, в начале файла, указывающего позиции, где начинаются строки.Вы можете использовать формат базы данных или просто добавить таблицу в начале файла.Или создайте отдельный индексный файл, который будет сопровождать ваш большой текстовый файл.
например, вы можете создать список позиций символов для новых строк:
awk 'BEGIN{c=0;print(c)}{c+=length()+1;print(c+1)}' file.txt > file.idx
, затем прочитать с помощью tail
, что на самом деле seek
непосредственно в соответствующую точку в файле!
например, чтобы получить строку 1000:
tail -c +$(awk 'NR=1000' file.idx) file.txt | head -1
- Это может не работать с 2-байтовыми / многобайтовыми символами, так как awk "распознает символы", но tail не имеет.*
- Я не проверял это на большом файле.
- Также см. этот ответ .
- В качестве альтернативы - разбейте файл на более мелкие файлы!