BEGIN { tags[0] = 0 } function size() {return 0} $1 == "tag" { tags[size()] = tags[0]+1 tags[tags[0]] = $2 tags[0] = tags[0]+1 tags[tags[0]] = $3 for(i = 1; i <= $4; i++) print $2, i, $5, tags[0] next } { #no match print $0 } END { if (tags[0] > 0) { printf "tags" for (i = 1; i <= tags[size()]; i++) { printf " " tags[i] } } }