У меня очень длинный файл журнала, можно ли запросить 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".