CentOSの構成ファイルの比較とマージ

CentOSの構成ファイルの比較とマージ

毎日新しいファイルをダウンロードして直接置き換えて、cronを介して設定ファイル(テキストベース)の自動更新(複数のサーバー用)bashスクリプトを設定しようとしています。スクリプトはうまく機能しますが、時には各サーバーにデフォルトの設定ファイルとは異なる特定の設定が必要な場合があります。たとえば、標準構成行の 1 つは次のとおりです。

port_defined=1,2,3

また、一部のサーバーには以下が必要です。

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

そのサーバーで構成行を手動で変更できますが、自動更新スクリプトを実行するたびに上書きされます。

したがって、問題は、参照設定ファイルをダウンロードし、違いがある場合は、まずローカル設定ファイル(対応するサーバー上)と比較してからマージするbashスクリプトを作成できますか?

「マージ」とは、ラインを次のように正しく結合することを意味します。

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

2つの別々の行の代わりに:

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
    }
}

関連情報