Verwenden der Shell (Bash) zum Bestimmen des Schlüssels für den Wert aus einer Datei

Verwenden der Shell (Bash) zum Bestimmen des Schlüssels für den Wert aus einer Datei

Ich schreibe Skripte für die Bereitstellung einiger Anwendungen und Bereitstellungspromotionsprozesse mithilfe von Bash (Shell). Diese Skripte werden als Ausfallsicherung geschrieben, falls unsere CI-Plattform jemals wieder ausfällt (wie es kürzlich der Fall war).

In diesem Prozess verfügt jede Anwendung über eine Textdatei mit Schlüssel-Wert-Paaren, wobei der Schlüssel der Name der Bereitstellungsregion (dev, qa, prod) und der Wert ein Hash ist, der mit den bereitstellbaren Dateien verknüpft ist.

Ich versuche herauszufinden, wie ich den Schlüssel am besten erkennen kann, anstatt den Wert einfach durch die Beschaffung der Datei zu ermitteln. Aber die Beschaffung der Datei und das anschließende manuelle Vergleichen der Werte für jede Bereitstellungsregion scheint ein Umweg zu sein.

ZUSAMMENFASSUNG 1. Ich habe den Wert (sha1sum), aber ich brauche den/die Schlüssel, zu dem/denen er gehört. 2. Bestimmen Sie den Schlüssel im Schlüssel-Wert-Paar aus der Datei. 3. Bestimmen Sie die höchste Bereitstellungsregion mit dem zugehörigen Wert (d. h.: Es könnten mehrere Regionen potenziell denselben Wert aufgelistet haben, die Wahrscheinlichkeit steigt, je weiter wir in der Kette nach oben gehen.)

Irgendwelche Vorschläge?

BEARBEITEN 1 Der benötigte Code befindet sich hier:

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

So sieht die Schlüssel-Wert-Datei aus:

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

BEARBEITEN 2 Der Beispiel-Schlüssel-Wert-Datei wurden zusätzliche Beispiel-Sha1sum-Werte hinzugefügt, um zu zeigen, wie der gleiche Wert für mehrere Schlüssel existieren kann.

Antwort1

Eigentlich hätte ich gerne ein Beispiel der zu bearbeitenden Datei gesehen, aber der Code selbst hat meine Annahme bestärkt.

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

Hier übergeben wir einfach den Hash an awk und bitten es, die Zeilen bei Gleichheitszeichen aufzuteilen. Wenn der Wert nach dem Zeichen der Hash ist, drucken wir den Wert vor dem Zeichen aus, hoffentlich die Region. Dann können Sie diese Werte nach Ihren Bedürfnissen sortieren oder auch nicht.

Wenn wir alle Schlüssel für einen Hash sehen möchten, können wir Folgendes verwenden:

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

Wenn nur der letzte Schlüssel für einen Hash in der Datei interessant ist, gewinnt dieser Code:

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

verwandte Informationen