awk sub/gsub 重复结束分隔符的 2 个匹配项之间的子字符串

awk sub/gsub a substring between 2 matches with end-delimiter repeated

我有一个字符串 (file) :

2   61009818    .   TAGG    T   .   .   ad_alt=9;ad_ref=48;denovo=NA;dp_bin=50;

如何将子字符串 ad_ref=48 替换为 example=something,以获得:

2   61009818    .   TAGG    T   .   .   ad_alt=9;example=something;denovo=NA;dp_bin=50;

awk替换?

我试过了:

awk  '{ sub(/(ad_ref=.*\;)/,"example=something")} 1' file

但它会替换所有内容,从第一次匹配到行尾:

# output
2   61009818    .   TAGG    T   .   .   ad_alt=9;example=something

虽然我只需要替换第一个 ; 之前的字符。 我找到了不同的帖子,但所有帖子都基于唯一的结束定界符,如何告诉命令仅替换开始定界符和第一个结束定界符之间的部分(; 在我的例子中)?

在此先感谢您的帮助!

$ awk '{sub(/ad_ref=[^;]*/,"example=something")} 1' file
2   61009818    .   TAGG    T   .   .   ad_alt=9;example=something;denovo=NA;dp_bin=50;

$ sed 's/ad_ref=[^;]*/example=something/' file
2   61009818    .   TAGG    T   .   .   ad_alt=9;example=something;denovo=NA;dp_bin=50;