es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Analice múltiples archivos json y genere la salida de las coincidencias/hit contra el regex junto con los nombres de archivo asociados.

Actualmente, el comando cat canalizado a jq me ayuda a analizar varios archivos JSON en mi directorio de trabajo y compararlos con el patrón regex que coincide con los identificadores de correo electrónico disponibles en todos los archivos. Sin embargo, estoy interesado en identificar también el nombre del archivo en el que se encuentra/empareja el patrón regex.

Solicito su amable ayuda para ajustar el comando y que imprima $filename. ¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para imprimir el nombre del archivo junto con las IDs de correo electrónico coincidentes, puede modificar el comando jq de la siguiente manera:

    cat *.json | jq --arg fname "(input_filename | split(\"/\") | last)" '. as $datos | [path(..| select(scalars and (tostring | test("^[a-zA-Z0-9+_.-]+@[a-zA-Z0-9.-]+$", "ixn"))))] | map({ "\($fname):" + (.|join(".")): (. as $ruta | .=$datos | getpath($ruta)) }) | reduce .[] as $item ({}; . * $item)'
    

    Aquí, estamos utilizando la variable integrada input_filename para obtener el nombre de archivo de cada archivo de entrada, y luego dividiéndolo por / y seleccionando el último elemento para obtener solo el nombre del archivo. Este nombre de archivo se pasa al script jq como un argumento --arg fname.

    Luego, estamos modificando la función map para agregar el nombre de archivo a las claves de resultado como "\($fname):" + (.|join(".")). Esto creará claves de resultado en el formato filename.json.path.to.key, que incluye el nombre de archivo junto con la ruta original.

    Finalmente, estamos reduciendo los objetos de resultado como antes usando reduce, para que obtengamos un solo objeto JSON con todas las IDs de correo electrónico coincidentes de todos los archivos de entrada, junto con sus respectivos nombres de archivo.

Comments are closed.