Чтение определенной строки файла - PullRequest
9 голосов
/ 22 сентября 2010

Каков наилучший способ (лучшая производительность) для чтения определенной строки файла?В настоящее время я использую следующую командную строку:

head -line_number file_name | tail -1

пс .: предпочтительно, используя инструменты оболочки.

Ответы [ 5 ]

7 голосов
/ 22 сентября 2010

Вы можете использовать sed.

# print line number 10
$ sed -n '10p' file_name
$ sed '10!d' file_name
$ sed '10q;d' file_name
5 голосов
/ 23 сентября 2010
#print 10th line
awk NR==10 file_name
3 голосов
/ 22 сентября 2010

awk -v linenum=10 'NR == linenum {print; exit}' file

2 голосов
/ 22 сентября 2010

Если вы знаете, что строки имеют одинаковую длину, то программа может напрямую индексировать эту строку, не читая все предыдущие: что-то вроде od может сделать это, или вы можете закодировать ее в полдюжины линии в большинстве - любой язык. Найдите функцию под названием seek () или fseek ().

В противном случае, возможно ...

tail +N | head -n 1

... так как от этого требуется хвост, чтобы перейти к N-й линии, и через трубу без необходимости вводится меньше линий, чем для решения «голова к хвосту».

0 голосов
/ 22 сентября 2010
ruby -ne '$.==10 and (print; exit)' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...