BEGIN { havedata = 0; group = subgroup = ""; print "\n"; } /^[A-Za-z]+: *(.*)/ { keyword = tolower(substr( $0, 1, index( $0, ":" ) - 1 ) ); data = substr( $0, index( $0, ":" ) + 1 ); sub( /^ +/, "", data ); sub( / +$/, "", data ); if( keyword == "group" ) { if( group != "" ) { print "\n" } printf "%s\n", data; group = data; subgroup = ""; next; } if( keyword == "subgroup" ) { if( subgroup != "" ) { printf "\n", subgroup } printf "%s\n", data; subgroup = data; next; } havedata = 1; fields[keyword] = data; next; } /^ *$/ { if( havedata == 0 ) { next } print "\n"; for( keyword in fields ) { printf "<%s>%s<%s>\n", keyword, fields[keyword], keyword } print "\n"; havedata = 0; delete fields; next; } { printf "Invalid input: %s\n", $0; exit; } END { if( havedata == 1 ) { print "\n"; for( keyword in fields ) { printf "<%s>%s<%s>\n", keyword, fields[keyword], keyword } print "\n"; } if( subgroup != "" ) { print "\n" } if( group != "" ) { print "\n" } print "\n"; }