#!/usr/bin/awk -f BEGIN { FS=OFS="\t" } { gsub(/; *$/, "", $9) # trim trailing `;' split($9, pairs, / *; */) # split attributes into pairs delete attr for (i in pairs) { split(pairs[i], kv, / */) # split pair into key and value attr[kv[1]] = kv[2] # add it to `attr' } # fill missing fields if (!("gene_name" in attr)) attr["gene_name"] = attr["gene_id"] if (!("transcript_id" in attr)) attr["transcript_id"] = attr["gene_id"] if (!("transcript_name" in attr)) attr["transcript_name"] = attr["transcript_id"]; if (!("tag" in attr)) attr["tag"] = "\"basic\""; # recreate the attributes field attr_all = sep = "" for (k in attr) { attr_all = attr_all sep k " " attr[k] sep = "; " } # update the record with new attributes $9 = attr_all";" } 1 # print record