쉘(bash)을 사용하여 파일의 값에 대한 키 결정

쉘(bash)을 사용하여 파일의 값에 대한 키 결정

bash(셸)를 사용하여 일부 애플리케이션 배포 및 배포 승격 프로세스를 스크립팅하고 있습니다. 이러한 스크립트는 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

관련 정보