【问题标题】:awk sub/gsub a substring between 2 matches with end-delimiter repeatedawk sub/gsub 两个匹配项之间的子字符串,重复结束分隔符
【发布时间】:2019-07-27 16:32:48
【问题描述】:

我有一个字符串 (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

虽然我只需要在第一个 ; 之前替换字符。 我发现了不同的帖子,但都是基于唯一的结束分隔符,如何告诉命令仅替换开始分隔符和 FIRST 结束分隔符之间的部分(在我的情况下为;)?

提前感谢您的帮助!

【问题讨论】:

  • ad_ref=[^;]* 之类的。

标签: awk substring gsub substitution


【解决方案1】:
$ 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;

【讨论】:

    猜你喜欢
    • 2019-09-24
    • 2018-07-28
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 2014-12-08
    • 2017-03-17
    • 2019-04-05
    • 1970-01-01
    相关资源
    最近更新 更多