awk ищет символы рекурсивно - PullRequest
0 голосов
/ 28 октября 2019

Я бы хотел рекурсивно искать строку в нескольких файлах.

Ранее я использовал grep, и он отлично работает.

grep -r SearchString.

Но я слышал, что awk работает намного быстрее. Поэтому я использую приведенную ниже команду, но она просто распечатывает все в файле?

awk 'If ($0 ~/SearchString/) {print $0} ' /path/*

1 Ответ

0 голосов
/ 28 октября 2019

Ваши предположения немного ошибочны. Awk - это инструмент, предназначенный для работы с предопределенным набором файлов. Так что он не имеет никаких знаний о рекурсивной обработке файлов .

В одном файле можно указать:

awk '/regex/' file1 file2

, и при этом будут напечатаны все строки файла file1 и file2, которые соответствуют regex. Это, однако, может быть не тем, что вам нужно, поскольку оно не дает никакой информации о том, какая строка принадлежит какому файлу, в отличие от grep -E 'regex' file1 file2. Чтобы достичь этого, вам уже нужно начать добавлять вещи, делая ваш awk немного менее удобным:

awk '/regex/{print FILENAME,":",$0}' file1 file2

Если вы хотите использовать рекурсив, вам нужно будет использовать find для этого:

find . -type f -print0 | xargs -0 awk '/regex/{print FILENAME":", $0}'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...