zgrep столбца и вывод соответствующего имени файла

zgrep столбца и вывод соответствующего имени файла

Я пытаюсь сопоставить шаблон для определенного столбца в тысячах сжатых файлов на машине Linux, и на основе совпадения я хочу вывести имя файла, как это сделать. Нижеприведенные варианты не работают для меня, пожалуйста, какие-нибудь предложения. Спасибо

zgrep 12345 *|  awk -F"^" '{if($8==12345) print}' 
find . -type f |xargs zcat |  awk -F"^" '{if($8==12345) print}' 

решение1

Самое ясное/простое IMHO:

while IFS= read -r fname; do
    zcat "$fname" | awk -F'^' -v fname="$fname" '$8==12345{print fname, $0}'
done < <(find . -type f)

но есть также возможность вывести имя файла из zgrep и прочитать его с помощью awk, что может быть более эффективно (но полагается на то, что имя файла не содержит никаких символов :s):

zgrep -H '12345' * |
awk -F'^' '{fname=$0; sub(/:.*/,"",fname); sub(/[^:]+:/,"")} $8==12345{print fname, $0}'

Оба решения предполагают, что в именах файлов нет символов новой строки, а первое решение также предполагает отсутствие управляющих последовательностей, как \tв именах файлов.

Связанный контент