CentOS의 구성 파일 비교 및 ​​병합

CentOS의 구성 파일 비교 및 ​​병합

매일 새 파일을 다운로드하고 직접 교체하여 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
    }
}

관련 정보