Речь идет о Unix и Linux.

Да, есть много решений для этого, например, см. Http://mywiki.wooledge.org/BashFAQ/011. Некоторые из них быстры как ад (не читая весь файл), а некоторые медленны, но коротки и намного более читабельны. Меня интересует решение, которое работает с небольшими файлами <1 МБ, легко запоминается и легко читается и должно заканчиваться менее 1 секунды. Конечно, я мог бы написать сценарий или псевдоним оболочки, но когда я прихожу на новые установленные компьютеры, мне нужно сначала восстановить свою среду, поэтому я предпочитаю решение, которое работает с большинством Unix и Linux Distris из коробки, или, по крайней мере, после установки нужный инструмент через управление пакетами. Может кто-нибудь победить это?

 awk NR==42 file

5 ответов5

1

Пока есть команда голова и хвост

Это напечатает 12-ю строку файла abc. Оставьте tail -n 1 и просто измените 12 на любой номер строки, который вы хотите напечатать.

$ head -n 12 abc | хвост -n 1

Если вы хотите установить инструмент через управление пакетами, тогда вы должны использовать скрипт, который вы пишете, а также, я думаю, что, возможно, все ваши дистрибутивы Linux и Unix имеют команды head и tail. но если нет, то установите их или установите awk или perl, конечно, все, что вы используете, будет работать одинаково на любой системе, если в системе есть инструмент, будь то голова и хвост, awk или perl.

1

Недостатком решений awk и perl является то, что они продолжают читать после печати N-й строки. Для проверки этого можно использовать команду yes , которая печатает бесконечное количество строк.

Краткое решение, которое разделяет эту проблему:

 sed -n 42p file

Этот выходит после печати строки:

sed -n '42{p;q}' file
0

Я не думаю, что смогу превзойти ваш пример AWK для краткости или читабельности, но вот пример Perl

  perl -ne 'print if $. == 42' file
0

используйте sed:

sed -n 42p file

Его легко набирать (без прописных букв, не нужно нажимать "Shitft") и он очень короткий.

0

Вы можете использовать sed. В следующей команде параметр -n отключает печать каждой строки, поэтому выполняется только явная печать (команды p ). 12 соответствует 12 -й строке, а p печатает.

sed -n '12 p'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .