У меня очень длинный файл журнала, можно ли запросить grep только для поиска первых 10 строк?
Могу ли я grep только первые n строк файла?
Ответ 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".