Usando Shell (bash) para determinar la clave del valor del archivo

Usando Shell (bash) para determinar la clave del valor del archivo

Estoy creando secuencias de comandos para la implementación de algunas aplicaciones y procesos de promoción usando bash (shell). Estos scripts se están escribiendo como medida de seguridad en caso de que nuestra plataforma de CI vuelva a fallar (como sucedió recientemente).

En este proceso, cada aplicación tiene un archivo de texto con pares clave-valor donde la clave es el nombre de la región de implementación (dev, qa, prod)… y el valor es un hash asociado con los archivos implementables.

Estoy luchando por determinar cuál es la mejor manera de abordar el reconocimiento de la clave en lugar de recopilar el valor simplemente obteniendo el archivo... pero obtener el archivo y luego comparar manualmente los valores para cada región de implementación parece que tiene que ser el camino más largo.

RESUMEN 1. Tengo el valor (sha1sum), pero necesito las claves a las que pertenece 2. Determinar la clave en el par clave-valor del archivo 3. Determinar la región de implementación más alta con el valor asociado (es decir, varias regiones podrían potencialmente tienen el mismo valor en la lista, la probabilidad aumenta a medida que ascendemos en la cadena).

¿Alguna sugerencia?

EDITAR 1 Aquí es donde residiría el código necesario:

###################################################################################################
# IS THIS HASH CURRENTLY DEPLOYED SOMEWHERE ELSE? IF SO, WHERE?
###################################################################################################
grep "${deployHash}" "${deployHashHome}/${deployAppName}/${deployAppName}.manifest"
if [[ "$?" -eq 0 ]]
then
    source ${deployHashHome}/${deployAppName}/${deployAppName}.manifest


    previousDeployRegion=""
    # logThis is a custom logging function which formats logs exactly how we want, we have a Splunk parser for the format
    logThis "${scriptLogDir}/${deployLogFile}" "The hash: ${deployHash}, has been previously deployed to ${previousDeployRegion}." "INFO"
fi

Así es como se ve el archivo clave-valor:

mylocal=ca9c244aa1b40f39fd06318f2be9fbc1a82c5c5c
dev=986b747d846555f8c5e393a5cfbbd061ee9d68a7
int=53b8fa87f2241a17623ead2f94032b1d2045069e
reg=53b8fa87f2241a17623ead2f94032b1d2045069e
stage=
prod=
dr=

EDITAR 2 Se agregaron valores de ejemplo sha1sum adicionales al archivo de valores-clave de ejemplo para mostrar cómo puede existir el mismo valor para varias claves.

Respuesta1

En realidad, me hubiera gustado ver algún ejemplo del archivo en el que trabajar, pero el código en sí fortaleció mi suposición.

hash="blablabla"
awk -F' *= *' -v hash="$hash" '$2 == hash { print $1 }' your.manifest | sort ...

Aquí simplemente pasamos el hash a awk y le pedimos que divida las líneas en signos iguales. Si el valor que sigue al signo es el hash, imprimimos el valor antes del signo, con suerte la región. Entonces puede ordenar o no esos valores según sus necesidades.

Si queremos ver todas las claves de un hash, podemos usar esto:

awk -F' *= *' -v hash="$hash" '$2 == hash { keys=(keys ? keys "," $1 : $1)}; END { print keys}' your.manifest

Si solo es interesante la última clave para un hash en el archivo, entonces este código gana:

awk -F' *= *' -v hash="$hash" '$2 == hash { key=$1}; END { print key}' your.manifest

información relacionada