Making a bunch of assumptions about what characters your fields can contain (i.e. that they always look just like your example), here's how to parse the data such that you can do anything you like with it in future:
$ cat tst.awk
BEGIN { FS="[[:space:]]*,[[:space:]]*"; OFS="\t" }
{
for (i=1; i<=NF; i++) {
head = tail = $i
sub(/[[:space:]]*{.*/,"",head)
gsub(/.*{[[:space:]]*|[[:space:]]*}[[:space:]]*$/,"",tail)
n = split(tail,subFlds,/[[:space:]]*;[[:space:]]*/)
print "field:", $i
print "head:", head
print "tail:", tail
for (j=1; j<=n; j++) {
print "sub " j ":", subFlds[j]
}
print "\n------------\n"
}
print "############\n"
}
.
$ awk -f tst.awk file
field: universe {planets;stars;people}
head: universe
tail: planets;stars;people
sub 1: planets
sub 2: stars
sub 3: people
------------
field: planet {countries; restaurants}
head: planet
tail: countries; restaurants
sub 1: countries
sub 2: restaurants
------------
field: sky {clouds; planes}
head: sky
tail: clouds; planes
sub 1: clouds
sub 2: planes
------------
############
field: table {dishes}
head: table
tail: dishes
sub 1: dishes
------------
field: chair {butts; more butts}
head: chair
tail: butts; more butts
sub 1: butts
sub 2: more butts
------------
field: face {eyes; mouths}
head: face
tail: eyes; mouths
sub 1: eyes
sub 2: mouths
------------
############
field: computers {memories; processors}
head: computers
tail: memories; processors
sub 1: memories
sub 2: processors
------------
field: screens {good images; bad images; ugly images}
head: screens
tail: good images; bad images; ugly images
sub 1: good images
sub 2: bad images
sub 3: ugly images
------------
field: dogs {tails; fun }
head: dogs
tail: tails; fun
sub 1: tails
sub 2: fun
------------
############
For more robust parsing of CSVs (your sample just appears to use {...}
where a regular CSV uses "..."
) in general with awk, see What's the most robust way to efficiently parse CSV using awk?