매일 새 파일을 다운로드하고 직접 교체하여 cron을 통해 구성 파일(텍스트 기반)에 대한 자동 업데이트(여러 서버용) bash 스크립트를 설정하려고 합니다. 스크립트는 잘 작동하지만 때로는 각 서버에 기본 구성 파일과 다른 특정 설정이 필요한 경우가 있습니다. 예를 들어 표준 구성 줄 중 하나는 다음과 같습니다.
port_defined=1,2,3
또한 일부 서버에는 다음이 필요합니다.
port_defined=1,2,3,4,5,6
해당 서버에서 구성 라인을 수동으로 변경할 수 있지만 자동 업데이트 스크립트를 실행할 때마다 다시 덮어쓰게 됩니다.
따라서 문제는 참조 구성 파일을 다운로드한 다음 차이점이 있는 경우 먼저 로컬 구성 파일(해당 서버의)과 비교한 다음 병합하는 bash 스크립트를 만들 수 있습니까?
"병합"이란 라인을 다음과 같이 올바르게 결합하는 것을 의미합니다.
port_defined=1,2,3,4,5,6
두 개의 별도 줄 대신:
port_defined=1,2,3
port_defined=1,2,3,4,5,6
답변1
정말로 값 목록을 병합하시겠습니까? 그건
port_defined=1,3,5
port_defined=2,4,123
으로 병합되어야 한다
port_defined=1,2,3,4,5,123
그렇다면 시도해 볼 수 있습니다
BEGIN { FS = "=" }
NR == FNR && /ports_defined/ { ports=$2 }
NR > FNR {
if ($1 == "ports_defined") {
ports = ports "," $2
split(ports, p, ",")
for (i in p) {
if (!num[p[i]]) {
result = result "," p[i]
num[p[i]] = 1
}
}
print $1 "=" substr(result, 2)
} else {
print
}
}