zgrep una columna e imprime el nombre de archivo correspondiente

zgrep una columna e imprime el nombre de archivo correspondiente

Estoy tratando de hacer coincidir el patrón para una columna en particular entre los miles de archivos comprimidos con gzip en una máquina Linux y, según la coincidencia, quiero imprimir el nombre del archivo sobre cómo hacerlo. Las siguientes opciones no me funcionan, alguna sugerencia por favor. Gracias

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

Respuesta1

En mi humilde opinión, lo más claro/simple es:

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

pero también existe la opción de imprimir el nombre del archivo desde zgrep y leerlo con awk, lo que puede ser más eficiente (pero depende de que el nombre del archivo no contenga ningún :s):

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

Ambas soluciones suponen que no tiene nuevas líneas en los nombres de sus archivos y la primera tampoco asume que no hay secuencias de escape como \ten los nombres de sus archivos.

información relacionada