Давайте предполагать, что у меня есть файл archivo
со многими линиями, но только я хочу напечатать одну в частности, давайте говорить число n
.
Как я могу получать это используя программные средства, которые были бы в стандартной системе Linux? Выбор head XX archivo | tail -N
она мне кажется мало практической.
Легкий для того, чтобы быть написанным:
sed -n 123456p
Быстрее, особенно, если линия не около конца:
sed '123456q; d'
Немного быстрее, по крайней мере, если файл - большой (benchmarks):
tail -n +123457 | head -n 1
head … | tail …
он гораздо более медленный, потому что первые 123465 линий проходят по трубе.
Ты можешь делать это используя команду sed
(Стреам Эдитор):
sed 'LINEAq;d' file
Пример:
$ cat hello.go
package main
import (
"fmt"
)
func main() {
fmt.Printf("hello, world\n")
}
Печатать первую lГ-nea:
$ sed '1q;d' hello.go
package main}
Печатать ее sГ©ptima lГ-nea:
$ sed '7q;d' hello.go
func main() {
Для большего informaciГіn на sed
, ты можешь посещать documentaciГіn чиновник из GNU.
Мне приходят в голову несколько выборов.
С awk
мы можем говорить:
awk 'NR==n' archivo
и если число содержалось в переменной $numero
, мы можем говорить:
awk -v linea="$numero" 'NR==linea' archivo
Как NR
он относится к линии, которая читается в данном моменте, только мы должны сравнивать Вашу стоимость со стоимостью переменной, которую мы распределяем ему через -v linea="n"
. Например, -v linea=5
.
Если оказывается, что файл очень, очень большой, всегда мы можем выходить однажды былась imprimido линия это, чтобы не продолжать читать без необходимости:
awk 'NR==linea {print; exit}' archivo
Если мы предпочитаем использовать sed
, мы можем говорить:
sed -n 'Np' archivo
И для больших файлов:
sed -n 'N{p;q;}' archivo
Это напечатает линию я нумерую N
и далее он остановит выполнение.
Если стоимость находится в переменной, мы должны использовать двойные кавычки для того, чтобы стоимость расширилась и ${n}
для того, чтобы было понятно, что имя переменной $n
и нет $np
:
sed -n "${n}p" archivo
exit
, для тех tamañ или normalito я не думаю, что это различие слишком воспринимаемого времени.
– fedorqui
24.11.2017, 14:05
head
и pipe
с tail
serГ-an медленные для очень большого файла. Я recomendarГ, - чтобы использовать sed
asГ-:
sed 'NUMq;d' archivo
, Где NUM
состоит nГєmero lГ-nea в том, что ты хочешь напечатать.