file1에서 [abc] 아래의 IP를 추출하고 file2의 호스트 목록을 해당 IP로 바꾸고 싶습니다.
파일 1:
[abc]
192.168.29.153
192.168.29.155
[def]
192.168.29.153
[xyz]
192.168.29.153
파일 2:
output.logstash:
# The Logstash hosts
hosts: ["192.168.29.115:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
답변1
awk
괜찮다 면 괜찮을 것 같아요 .
#! /usr/bin/awk -f
# here, NR is record number, and FNR is *file* record number - this matches only
# in first file
NR == FNR {
# if first field matches
if ($1 ~ /abc/) {
# arrange addresses with `", "` between them
abc=$2
for (i=3; i<=NF; i++) abc = abc "\", \"" $i
}
# then we're finished with this file.
next;
}
$1 ~ /hosts/ {
# print the saved addresses formatted with `["` addr `"]`
printf " %s [\"%s\"]\n", $1, abc ;
next
}
# print any other lines with no editing.
{ print }
아래와 같이 업데이트된 파일의 출력을 제공합니다. 각 파일을 개별적으로 처리하기 위해 내장 변수 RS(Record Separator)가 파일 간에 업데이트되고 있음을 참고하세요.
~$ ./log_edit RS='[' hosts RS='\n' logstash
output.logstash:
# The Logstash hosts
hosts: ["192.168.29.153", "192.168.29.155"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem
또한 출력을 저장한 다음 이전 파일을 바꿔야 합니다.