Использование оболочки (bash) для определения ключа для значения из файла

Использование оболочки (bash) для определения ключа для значения из файла

Я пишу скрипты для развертывания некоторых приложений и процессов продвижения с использованием bash (shell). Эти скрипты пишутся как отказоустойчивые на случай, если наша платформа CI когда-нибудь снова выйдет из строя (как это недавно произошло).

В этом процессе каждое приложение имеет текстовый файл с парами ключ-значение, где ключ — это имя региона развертывания (dev, qa, prod)… а значение — это хэш, связанный с развертываемым файлом(ами).

Я изо всех сил пытаюсь определить, как лучше всего подойти к распознаванию ключа, а не извлекать значение, просто извлекая файл... но извлечение файла и затем ручное сравнение значений для каждого региона развертывания, похоже, должно быть долгим обходным путем.

РЕЗЮМЕ 1. У меня есть значение (sha1sum), но мне нужны ключ(и), к которым оно принадлежит 2. Определите ключ в паре ключ-значение из файла 3. Определите наивысший регион развертывания с соответствующим значением (т. е. несколько регионов потенциально могут иметь одно и то же указанное значение, вероятность увеличивается по мере подъема по цепочке.)

Какие-либо предложения?

ПРАВКА 1 Вот где будет находиться необходимый код:

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

Вот как выглядит файл «ключ-значение»:

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

ПРАВКА 2 Добавлены дополнительные примеры значений sha1sum в пример файла «ключ-значение», чтобы показать, как одно и то же значение может существовать для нескольких ключей.

решение1

На самом деле мне бы хотелось увидеть какой-нибудь пример файла, над которым можно было бы поработать, но сам код укрепил мое предположение.

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

Здесь мы просто передаем хэш в awk и просим его разделить строки по знакам равенства. Если значение после знака является хешем, мы выводим значение до знака, с надеждой на регион. Затем вы можете сортировать или не сортировать эти значения в соответствии с вашими потребностями.

Если мы хотим увидеть все ключи для хеша, мы можем использовать это:

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

Если интересен только последний ключ хеша в файле, то побеждает этот код:

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

Связанный контент