Solução AWK
complexa:
awk 'function process(a,c) { # process the lines of one passed block
for (i=1; i<=c; i++) {
split(a[i], fields); # split the line into 2 fields
if (fields[2]=="org-abc") abc="222";
else if (fields[2]=="org-xyz") xyz="333";
else print a[i]
}
if (abc || xyz) printf "objectClass: org-%s\n",(abc && xyz? "111" : (abc? "222":"333"))
}
!NF{ process(a, c); c=abc=xyz=0 }
{ a[++c]=$0 }
END{ process(a, c) }' file
Esta é a solução Memória suficiente , porque a matriz a
manterá as linhas de um único bloco somente durante todo o tempo de processamento . (o contador c
está sendo resetado em cada próximo bloco )
A saída:
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetorgperson
objectClass: org-111
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: org-222
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: org-111
objectClass: top
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: org-333