これらの値、特にファイルの下部に名前が付けられている既存のファイルの「記号とコロン」の間の=
値を変更する必要があります。つまり、:
zoo.cfg
...
Server.1=10.42.227.70:2891:3881
Server.2=10.42.229.63:2891:3881
Server.3=10.42.234.18:2891:3881
...
ホストファイル(つまりソースファイル)の値を使用します。
10.42.227.66 zoo1
10.42.229.119 zoo2
10.42.234.21 zoo3
誰でもこれを行う方法を案内できますか?
また、Zoo.cfgファイルのServer.1はZoo1と同じで、Server.2はZoo2と同じで、Server.3はZoo3と同じです。
問題を追加するには、ホストファイルには複数の異なるホスト(Zoo1、Zoo2、およびZoo3以外のホストなど)のエントリがあります。 Hosts ファイルの内容は次のとおりです。
10.42.224.153 dev.nifi1.datacond.dfc
10.42.229.87 dev.nifi2.datacond.dfc
10.42.236.46 dev.nifi3.datacond.dfc
10.42.231.56 zoo1
10.42.224.225 zoo2
10.42.239.41 zoo3
10.42.233.198 controlnode
10.42.231.56 node-master
10.42.230.71 node1
10.42.237.120 node2
Zooホスト行のみを処理するようにawkスクリプトを変更する方法はありますか?つまり、他のすべてのホストエントリは無視されますか?
答え1
awkを使用してください。
$ cat tst.awk
NR == FNR {
map[$2] = $1
next
}
FNR == 1 {
tgt = FILENAME
sub(/\.[^.]*$/,"",tgt)
}
{
key = $1
sub(/=.*/,"",key)
sub(/.*\./,"",key)
key = tgt key
}
key in map {
sub(/=[^:]+/,"=" map[key])
}
{ print }
$ awk -f tst.awk hosts zoo.cfg
...
Server.1=10.42.231.56:2891:3881
Server.2=10.42.224.225:2891:3881
Server.3=10.42.239.41:2891:3881
...
上記の例では、最初のフィールドに s がhost
含まれておらず、フィールドにスペースが含まれていないと仮定しています。&
上記は以下の入力ファイルで実行されました。
$ head -50 hosts zoo.cfg
==> hosts <==
10.42.224.153 dev.nifi1.datacond.dfc
10.42.229.87 dev.nifi2.datacond.dfc
10.42.236.46 dev.nifi3.datacond.dfc
10.42.231.56 zoo1
10.42.224.225 zoo2
10.42.239.41 zoo3
10.42.233.198 controlnode
10.42.231.56 node-master
10.42.230.71 node1
10.42.237.120 node2
==> zoo.cfg <==
...
Server.1=10.42.227.70:2891:3881
Server.2=10.42.229.63:2891:3881
Server.3=10.42.234.18:2891:3881
...