Usando shell (bash) para determinar a chave do valor do arquivo

Usando shell (bash) para determinar a chave do valor do arquivo

Estou criando scripts para implantação de alguns aplicativos e processos de promoção usando bash (shell). Esses scripts estão sendo escritos à prova de falhas, caso nossa plataforma de CI falhe novamente (como aconteceu recentemente).

Neste processo, cada aplicativo possui um arquivo de texto com pares de valores-chave onde a chave é o nome da região de implantação (dev, qa, prod)… e o valor é um hash associado ao(s) arquivo(s) implantável(s).

Estou lutando para determinar a melhor forma de reconhecer a chave em vez de coletar o valor apenas obtendo o arquivo ... mas obter o arquivo e comparar manualmente os valores para cada região de implantação parece ser um caminho mais longo.

RECAP 1. Eu tenho o valor (sha1sum), mas preciso da(s) chave(s) à qual ele pertence 2. Determine a chave no par de valores-chave do arquivo 3. Determine a região de implantação mais alta com o valor associado (ou seja: múltiplas regiões poderiam potencialmente têm o mesmo valor listado, a probabilidade aumenta à medida que subimos na cadeia.)

Alguma sugestão?

EDITAR 1 Aqui é onde o código necessário ficaria:

###################################################################################################
# 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

Esta é a aparência do arquivo de valor-chave:

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

EDITAR 2 Adicionados valores sha1sum de exemplo extras ao arquivo de valor-chave de exemplo para mostrar como o mesmo valor pode existir para várias chaves.

Responder1

Na verdade, eu gostaria de ver algum exemplo do arquivo para trabalhar, mas o próprio código reforçou minha suposição.

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

Aqui apenas passamos o hash para o awk e pedimos para ele dividir as linhas em sinais iguais. Se o valor após o sinal for o hash, imprimimos o valor antes do sinal, esperançosamente a região. Então você pode ou não classificar esses valores de acordo com suas necessidades.

Se quisermos ver todas as chaves de um hash, podemos usar isto:

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

Se apenas a última chave de um hash no arquivo for interessante, então este código vence:

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

informação relacionada