
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 \t
en los nombres de sus archivos.