titlelength=0 headers=0 for dummy in `echo "for(i=1;i<=2;i++)i" | bc` do #Find all menu numbers for menu in `cat $1 | nawk '/^\+[0-9][0-9]/ {printf("%s\n",substr($0,2,2))}'` do cat $1 | nawk -F, ' { for (i=1; i<=NF; i++) { if ($i=="*" thismenu) many++ } } { if (substr($0,1,3)=="+" thismenu) { for (i=1; i<=NF; i++) { if ((substr($i,1,1)!="+")&&(substr($i,1,1)!="*")) { outstr="" for (j=i; j<=NF; j++) { if (j!=NF) { outstr=outstr $j ", " } else { outstr=outstr $j } } next } } } } END { printf("%s,%s,%s\n","#" thismenu,many,outstr) }' thismenu=$menu cat $1 | nawk -F, ' BEGIN { reduce=0 } { if (substr($0,1,1)=="+") { reduce++ header=1 thisheader=$1 } else { header=0 } for (i=1; i<=NF; i++) { if ($i=="*" thismenu) { for (j=i; j<=NF; j++) { if ((substr($j,1,1)!="+")&&(substr($j,1,1)!="*")) { outstr="" for (k=j; k<=NF; k++) { if (k!=NF) { outstr=outstr $k ", " } else { outstr=outstr $k } } if (header==0) { printf("%s,%s\n",NR+titlelength-reduce,outstr) } else { printf("%s,%s\n",thisheader,outstr) } next } } } } } ' thismenu=$menu headers=$headers titlelength=$titlelength done > /tmp/menu_headers titlelength=`wc -l /tmp/menu_headers | awk '{print $1}'` done #Fix submenus for menu in `cat $1 | nawk '/^\+[0-9][0-9]/ {printf("%s\n",substr($0,2,2))}'` do row=`cat /tmp/menu_headers | nawk -F, ' { if ($1=="#" thismenu) { print NR } }' thismenu=$menu` cat /tmp/menu_headers | nawk -F, ' { if ($1=="#" thismenu) { printf("%s\n",substr($0,5,length($0)-4)) } else if ($1=="+" thismenu) { printf("%s,%s\n",where,substr($0,5,length($0)-4)) } else { print $0 } }' thismenu=$menu where=$row > /tmp/menu_headers1 cp /tmp/menu_headers1 /tmp/menu_headers done #lose line with titiles cat $1 | grep -v '^\+' > /tmp/titleless cat /tmp/titleless | nawk 'BEGIN { i=0 first=0 } /^\*/ { if (first!=0) { doit() i=0 } title=$0 first=1 } !/^\*/{ if (first!=0) { aline[i]=$0 i++ } } END { doit() } function doit() { last=1 do { pos=index(substr(title,last,length(title)-last),",") last=last+pos } while (substr(title,last,1)=="*") printf("%d,%s\n",i,substr(title,last,length(title)-last+1)) for (k=0; k /tmp/menutext cat /tmp/menu_headers /tmp/menutext