Compare e mescle o arquivo de configuração no CentOS

1

Eu estava tentando configurar um script bash de atualização automática (para vários servidores) via cron para um arquivo de configuração (baseado em texto) baixando o novo arquivo todos os dias e substituindo-o diretamente. O script funciona bem, no entanto, há um caso em que, às vezes, cada servidor precisaria ter configurações específicas diferentes do arquivo de configuração principal, por exemplo, uma das linhas de configuração padrão seria:

port_defined=1,2,3

enquanto isso, alguns servidores precisariam:

port_defined=1,2,3,4,5,6

Eu posso alterar manualmente essa linha de configuração no servidor correspondente, no entanto, ela seria substituída novamente toda vez que o script de atualização automática fosse executado.

Então, a questão, posso fazer um único script bash para baixar o arquivo de configuração de referência e, em seguida, compará-lo primeiro com o arquivo de configuração local (no servidor correspondente) para quaisquer diferenças e, em seguida, mesclá-lo?

Por "mesclagem", quero dizer combinar a linha corretamente em:

port_defined=1,2,3,4,5,6

em vez de duas linhas separadas:

port_defined=1,2,3
port_defined=1,2,3,4,5,6
    
por Yohanes 20.04.2016 / 09:59

1 resposta

1

Você realmente quer mesclar as listas de valores? Isso é

port_defined=1,3,5
port_defined=2,4,123

deve ser combinado em

port_defined=1,2,3,4,5,123

Se sim, você poderia tentar

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
    }
}
    
por 20.04.2016 / 10:36