실행 중인 서버 및 서비스 목록이 있고 다음 서비스에 서버 이름을 접두사로 추가하고 싶습니다.
다음 입력을 고려하십시오.
"SERVER": "us-east-1e-421"
"SERVICES.SNMP.STATUS": "ok"
"SERVICES.NTP.LATENCY": "1.644"
"SERVICES.POSTFIX.STATUS": "ok"
"SERVER": "us-west-1c-353"
"SERVICES.SNMP.STATUS": "ok"
"SERVICES.NTP.STATUS": "ok"
"SERVICES.NTP.LATENCY": "1.541"
"SERVICES.RSYNC.STATUS": "ok"
"SERVICES.NGINX.STATUS": "ok"
그래서 내가 원하는 것은
us-east-1e-421 SERVICES.SNMP.STATUS ok
us-east-1e-421 SERVICES.NTP.LATENCY 1.644
us-east-1e-421 SERVICES.POSTFIX.STATUS ok
us-west-1c-353 SERVICES.SNMP.STATUS ok
us-west-1c-353 SERVICES.NTP.STATUS ok
us-west-1c-353 SERVICES.NTP.LATENCY 1.541
us-west-1c-353 SERVICES.RSYNC.STATUS ok
us-west-1c-353 SERVICES.NGINX.STATUS ok
기본 sed를 사용하여 한 줄 또는 기본 검색/교체를 수행할 수 있으며 이전에 게시된 일부 sed 가이드를 읽어 보았습니다.https://docstore.mik.ua/orelly/unix/sedawk/appa_03.htm 하지만 이건 내 지식으로는 너무 많아서 도움이 필요해
sed '/([az]-[AZ]-[a-z0-9]-[0-9])/N;s/\n"/\1 /g'
답변1
선택하다awk
해결책:
awk -F': ' '{ gsub(/"/,"") }/SERVER/{ s=$2; next }{ print s, $1, $2 }' file
산출:
us-east-1e-421 SERVICES.SNMP.STATUS ok
us-east-1e-421 SERVICES.NTP.LATENCY 1.644
us-east-1e-421 SERVICES.POSTFIX.STATUS ok
us-west-1c-353 SERVICES.SNMP.STATUS ok
us-west-1c-353 SERVICES.NTP.STATUS ok
us-west-1c-353 SERVICES.NTP.LATENCY 1.541
us-west-1c-353 SERVICES.RSYNC.STATUS ok
us-west-1c-353 SERVICES.NGINX.STATUS ok
답변2
GNU sed 4.4 사용
sed -E '
/SERVER/{
s/.* "([^"]*)"/\1/
h
d
}
s/[:"]//g
G
s/([^\n]*)\n(.*)/\2 \1/
' infile
답변3
나는 동일한 효과를 얻기 위해 sed 명령을 사용했으며 훌륭하게 작동합니다.
i=$(sed -n '/us-/p' filename | awk -F ":" '{print $2}' | sed 's/"//g' | sed -n '1p' | sed '/^$/d' | sed -r "s/\s+//g")
j=$(sed -n '/us-/p' filename | awk -F ":" '{print $2}' | sed 's/"//g' | sed -n '2p' | sed '/^$/d' | sed -r "s/\s+//g")
sed -n "/$i/,/$j/p" filename | sed '$d'|sed '1d' |sed "s/SERVER//g" | sed 's/"//g' | sed 's/://g'|sed "s/^/$i /g";sed -n "/$j/,/,/p" o.txt | sed '1d' |sed "s/SERVER//g" | sed 's/"//g' | sed 's/://g'|sed "s/^/$j /g"
산출
us-east-1e-421 SERVICES.SNMP.STATUS ok
us-east-1e-421 SERVICES.NTP.LATENCY 1.644
us-east-1e-421 SERVICES.POSTFIX.STATUS ok
us-west-1c-353 SERVICES.SNMP.STATUS ok
us-west-1c-353 SERVICES.NTP.STATUS ok
us-west-1c-353 SERVICES.NTP.LATENCY 1.541
us-west-1c-353 SERVICES.RSYNC.STATUS ok
us-west-1c-353 SERVICES.NGINX.STATUS ok