Если я правильно понял ваше намерение,
/ name of section/ { c=FNR;}
(FNR-c>=2 && c>0) {print $1}
Если шаблон совпал, c
устанавливается на номер текущей строки, затем, если FNR
больше или равно c+2
, что является второй строкой после строки, в которой шаблон совпал, напечатайте первое поле. Без инициализации c
равно нулю, поэтому мы хотим избежать печати второй строки всего файла и поэтому добавляем дополнительное условие && c>0
.
Скажите tar
, какой файл он должен обрабатывать внутри архива:
for f in /path/*.gz; do
tar -xzf "$f" --to-command='grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern || true' fileA.txt
done
(fileA.txt
в конце команды tar
).
Вы можете ограничить файлы, которые должны быть извлечены с помощью tar.
Если вы используете GNU tar, используйте опцию --to-stdout
. Это проще, чем правильно передать команду в кавычках.
for TAR_ARCHIVE in /path/*.gz; do
TAR_FILENAME="fileA.txt"
tar -xzf "$TAR_ARCHIVE" --to-stdout "$TAR_FILENAME" | grep -Hn --label="$TAR_ARCHIVE/$TAR_FILENAME" pattern
done