使用 shell (bash) 確定檔案中值的鍵

使用 shell (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

相關內容