I have a tab-separated table whose first three rows look like this - one header row and the first two entries:

```
Geneid  Chr Start   End Strand  Length  Feature_count   contig_ID   MAG_id  RPKM
ID=G1_719_cleanedcontig_v2_1580_319;locus_tag=G1_719_cleanedcontig_v2_1580_319;contig_length=349332;orf_length=554;partial=00;sourcedb=None;annotvalue=0;ec=;product=hypothetical protein   G1_719_cleanedcontig_v2_1580    346495  347049  +   555 68733   NODE_28_length_349332_cov_12.741083 ag0r3_bin.39    11455.58033225708
ID=G1_719_cleanedcontig_v2_1582_130;locus_tag=G1_719_cleanedcontig_v2_1582_130;contig_length=189623;orf_length=3887;partial=00;sourcedb=None;annotvalue=0;ec=;product=hypothetical protein  G1_719_cleanedcontig_v2_1582    147164  151051  -   3888    61026   NODE_113_length_189623_cov_11.186889    ag0r3_bin.39    1451.8890393965803

```

I would like to extract, for each row, the information between "ID" and the first semicolon (e.g. for the first row, "G1\_719\_cleanedcontig\_v2\_1582\_130", and put it in a column to the right. How would I do this using Bash or Python or a combination of the two?