Допустим, у меня есть файл archivo
со многими строками, но я хочу напечатать только одну конкретную строку, скажем, число n
.
Как я могу добиться этого, используя инструменты, которые есть в стандартной системе Linux? Вариант head XX archivo | tail -N
мне кажется непрактичным.
Легко написать:
Быстрее, особенно если строка не в конце:
Чуть быстрее, по крайней мере, если файл большой ( бенчмарки ):
head … | tail …
это намного медленнее, потому что первые 123465 строк проходят через канал.Вы можете сделать это с помощью команды
sed
(Редактор потока) :Пример:
Распечатайте первую строку:
Выведите седьмую строку:
Для получения дополнительной информации о
sed
, вы можете посетить официальную документацию GNU.Мне приходят в голову несколько вариантов.
С
awk
мы можем сказать:и если число содержится в переменной
$numero
, мы можем сказать:Поскольку
NR
он относится к строке, которая читается в данный момент, нам нужно только сравнить его значение со значением переменной, которую мы ей присваиваем через-v linea="n"
. Например,-v linea=5
.Если окажется, что файл очень и очень большой, мы всегда можем выйти после того, как строка будет напечатана, чтобы не продолжать чтение без необходимости:
Если мы предпочитаем использовать
sed
, мы можем сказать:И для больших файлов:
Это напечатает номер строки,
N
а затем остановит выполнение.Если значение находится в переменной, мы должны использовать двойные кавычки, чтобы значение было развернуто и
${n}
чтобы было понятно, что имя переменной есть,$n
а не$np
:head
иpipe
withtail
будет медленным для очень большого файла. Я бы рекомендовал использоватьsed
его следующим образом:Где
NUM
находится номер строки, которую вы хотите напечатать.Шрифт