Aqui está uma solução awk. Eu não sei YML, então você pode precisar mexer com o regexps (por exemplo, o marcador de região pode ser recuado?). Observe que a construção print data >filename
cria ou trunca o arquivo na primeira vez que é alcançado para um determinado nome de arquivo e, em seguida, é anexado ao arquivo.
<input.yml awk '
/^[^ :]+: *$/ {sub(/: *$/,""); region=$0} # start of region
/^ *groups:/ { # owner or member list
sub(/^[^:]*: *\[/, ""); sub(/\].*/, ""); # extract bracketed names
split($0, names, / *, */); # split comma-separated list
for (n in names) # iterate over names
print region >names[n] ".txt"; # write or append to name file
}'
Não leve muito a sério, mas aqui está uma solução sed e shell.
<input.yml sed -n -e '/^[^ ]/ h' \
-e '/^ \+groups:/ {' \
-e 'G' \
-e 's/^[^:]*: *\[\(.*\)\]\n\(.*\):/,/' \
-e 's/, \+/,/g' \
-e 'p' -e '}' | (
IFS=,; set -f
while read -r region names; do
for name in $names; do
echo "$region" >>"$name.txt"
done
done
)