Могу ли я grep только первые n строк файла?

У меня очень длинный файл журнала, можно ли запросить grep только для поиска первых 10 строк?

Ответ 1

Магия труб;

head -10 log.txt | grep <whatever>

Ответ 2

Для людей, которые находят это в Google, мне нужно было искать первые n строки из нескольких файлов, но только печатать соответствующие имена файлов. Я использовал

 gawk 'FNR>10 {nextfile} /pattern/ { print FILENAME ; nextfile }' filenames

FNR..nextfile перестает обрабатывать файл после того, как будет показано 10 строк. //..{} печатает имя файла и перемещается при каждом появлении первого совпадения в заданном файле. Чтобы указать имена файлов для других программ, используйте

 gawk 'FNR>10 {nextfile} /pattern/ { print "\"" FILENAME "\"" ; nextfile }' filenames

Ответ 3

Или используйте awk для одного процесса без |:

awk '/your_regexp/ && NR < 11' INPUTFILE

В каждой строке, если your_regexp соответствует, а количество записей (строк) меньше 11, оно выполняет действие по умолчанию (которое печатает строку ввода).

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

sed -n '/your_regexp/p;10q' INPUTFILE 

Проверяет ваше регулярное выражение и печатает строку (-n означает, что вы не печатаете вход, который по умолчанию является по умолчанию) и завершает работу сразу после 10-й строки.

Ответ 4

У вас есть несколько вариантов использования программ вместе с grep. Самое простое, на мой взгляд, это использовать head:

head -n10 filename | grep ...

head выведет первые 10 строк (используя опцию -n), а затем вы можете передать этот вывод на grep.

Ответ 5

grep "pattern" <(head -n 10 filename)

Ответ 6

Выходной сигнал head -10 file можно передать на grep, чтобы выполнить следующее:

head -10 file | grep …

Использование Perl:

perl -ne 'last if $. > 10; print if /pattern/' file

Ответ 7

Вы можете использовать следующую строку:

head -n 10 /path/to/file | grep [...]

Ответ 8

head -10 log.txt | grep -A 2 -B 2 pattern_to_search

-A 2: напечатать две строки перед шаблоном.

-B 2: напечатать две строки после шаблона.

head -10 log.txt # read the first 10 lines of the file.

Ответ 9

Расширение ответа Йоахима Исакссона: Довольно часто мне нужно что-то из середины длинного файла, например. линии 5001-5020, и в этом случае вы можете объединить head с tail:

head -5020 file.txt | tail -20 | grep x

Это получает первые 5020 строк, затем отображает только последние 20 из них, а затем передает все на grep.

(Отредактировано: ошибка fencepost в моих примерах чисел, добавлен канал в grep)

Ответ 10

У меня была аналогичная проблема, и все вышеперечисленные проблемы не решают ее полностью. Я также заинтересован в получении имени файла, содержащего соответствующие строки. Мое решение:

ls |parallel --gnu 'cat <(echo {}) <(head {})|grep -B1 -m1 -P "^>.*F3$"'

N.B: шаблон в моем случае всегда соответствует первой строке.

Ответ 11

grep -m6 "string" cov.txt

Это ищет только первые 6 строк для string

Ответ 12

grep -A 10 <Pattern>

Это нужно, чтобы захватить шаблон и следующие 10 строк после шаблона. Это будет хорошо работать только для известного шаблона, если у вас нет известного шаблона, используйте предложения "head".