다음 awk 스크립트는 SAMPLE
블록에 항목을 추가 합니다 NOTES
. 같은 이름의 블록이 여러 개 있습니다. SAMPLE 항목을 첫 번째 블록 "NOTES"에만 추가하려면 이 명령에서 무엇을 변경해야 합니까?
class.txt에는 다음 내용이 포함되어 있습니다.
[serverClass:NOTES:new]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
[serverClass:NOTES:new23]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29sdf
이 명령을 실행한 후
awk -vRS= -vORS='\n\n' '
BEGIN{z="whitelist.0=SAMPLE";FS="\n"}
/NOTES/{
if (/[0-9]=/){
split($NF, a, /[.=]/);
sub(/0/, a[2]+1, z)
}
sub (/$/,"\n"z ,$0)
};1' class.txt
산출:
[serverClass:NOTES:new]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
whitelist.4=SAMPLE <-------
[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
whitelist.4=SAMPLE <-------
[serverClass:NOTES:new23]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29sdf
whitelist.4=SAMPLE <-------
블록 일치 [serverClass:NOTES]에만 추가하려면 위의 awk 명령에서 무엇을 변경해야 합니까?
예상되는:
[serverClass:NOTES:new]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
[serverClass:NOTES]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29
whitelist.4=SAMPLE <------- should be
[serverClass:NOTES:new23]
whitelist.0=TEST
whitelist.1=FRIDAY
whitelist.2=SPOON
whitelist.3=GAME29sdf
답변1
가장 간단한 방법은 변수를 사용하고 해당 값을 1
처음 NOTES
발견된 시간으로 설정하는 것입니다. 그런 다음 변수가 아닌 경우에만 새 항목을 추가하도록 스크립트에 지시하십시오 1
. 예를 들어:
awk -vRS= -vORS='\n\n' '
BEGIN{z="whitelist.0=SAMPLE";FS="\n"}
/NOTES/ && flag!=1{
if (/[0-9]=/){
split($NF, a, /[.=]/);
sub(/0/, a[2]+1, z);
flag=1;
}
sub (/$/,"\n"z ,$0)
};1' infile