Делая кучу предположений о том, какие символы могут содержать ваши поля (то есть, что они всегда выглядят так же, как ваш пример), вот как проанализировать данные так, чтобы вы могли делать с ними что угодно в будущем:
$ 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
------------
############
Для более надежного разбора CSV (ваш пример просто использует {...}
, где обычный CSV использует "..."
) в целом с awk, см. Чтосамый надежный способ эффективного анализа CSV с помощью awk?