команда Unix для чтения строки из файла путем передачи номера строки

Я ищу команду Unix для получения одной строки путем передачи номера строки большому файлу (приблизительно с 5 миллионами записей). Например, для получения 10-й строки я хочу сделать что-то как

command file-name 10

Действительно ли там какая-либо такая команда доступна? Мы можем сделать это цикличным выполнением через каждую запись, но это будет трудоемким процессом.

21
задан jgg 20 July 2010 в 00:17
поделиться

5 ответов

Эта запись форума предлагает:

sed -n '52p' (file)

для печати 52-й строки файла.

44
ответ дан 29 November 2019 в 06:49
поделиться

Вы можете сделать что-то вроде:

head -n<lineno> <file> | tail -n1

Это даст вам строки , а затем только последнюю строку вывода (ваша строка).

Изменить : Кажется, все решения здесь довольно медленные. Однако по определению вам придется перебирать все записи, поскольку операционная система не имеет возможности анализировать строчно-ориентированные файлы, поскольку файлы являются побайтно-ориентированными. (В некотором смысле все эти программы собираются подсчитать количество символов \ n или \ r .) Вместо отличного ответа я также представлю тайминги в моей системе некоторых из этих команд!

[mjschultz@mawdryn ~]$ time sed -n '145430980p' br.txt
0b10010011111111010001101111010111

real    0m25.871s
user    0m17.315s
sys 0m2.360s
[mjschultz@mawdryn ~]$ time head -n 145430980 br.txt | tail -n1
0b10010011111111010001101111010111

real    0m41.112s
user    0m39.385s
sys 0m4.291s
[mjschultz@mawdryn ~]$ time awk 'NR==145430980{print;exit}' br.txt 
0b10010011111111010001101111010111

real    2m8.835s
user    1m38.076s
sys 0m3.337s

Итак, в моей системе, похоже, решение sed -n ' p' является самым быстрым!

2
ответ дан 29 November 2019 в 06:49
поделиться

Забегая вперед, есть много способов сделать это и другие подобные вещи.

Если вы хотите напечатать несколько строк,

sed -n -e 'Np' -e 'Mp'

Где N и M - это строки, которые будут только напечатаны. См. 10 замечательных примеров просмотра огромных файлов журналов в Unix

6
ответ дан 29 November 2019 в 06:49
поделиться
command | sed -n '10p'

or

sed -n '10p' file
2
ответ дан 29 November 2019 в 06:49
поделиться

вы можете использовать awk

awk 'NR==10{print;exit}' file

Поместите выход после печати 10-й строки, чтобы awk больше не обрабатывал файл с 5 миллионами записей.

1
ответ дан 29 November 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: