zgrep uma coluna e imprima o nome do arquivo correspondente

zgrep uma coluna e imprima o nome do arquivo correspondente

Estou tentando corresponder o padrão para uma coluna específica nos milhares de arquivos compactados em uma máquina Linux e, com base na correspondência, quero imprimir o nome do arquivo como fazer isso. As opções abaixo não estão funcionando para mim, alguma sugestão, por favor. Obrigado

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

Responder1

O IMHO mais claro/simples é:

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

mas também há a opção de imprimir o nome do arquivo do zgrep e lê-lo com o awk, o que pode ser mais eficiente (mas depende do nome do arquivo não conter nenhum :s):

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

Ambas as soluções assumem que você não tem novas linhas nos nomes dos arquivos e a primeira também não assume sequências de escape como \tnos nomes dos arquivos.

informação relacionada