이러한 값, 특히 파일 하단에 이름이 지정된 기존 파일의 " " 기호와 콜론 " " =
사이의 값을 바꿔야 합니다. 즉,:
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
...