【问题标题】:Add string to make row non-duplicated添加字符串以使行不重复
【发布时间】:2020-02-29 23:05:52
【问题描述】:

我的制表符分隔数据框的最后一列包含 ENSG 代码(ENSG00000169189 和 ENSG00000076344)的重复字符串,ENST 无关紧要。对于每个重复的 ENSG 代码,我想在 ENSG 字符串上粘贴一个数字,使它们不重复。请参阅输出示例。

16  ensembl_havana  intron  27257582    27268705    .   -   .   ID=gene:ENSG00000169189;Parent=transcript:ENST00000361439
16  ensembl_havana  intron  27257582    27268705    .   -   .   ID=gene:ENSG00000169189;Parent=transcript:ENST00000563273
16  ensembl_havana  intron  27268375    27268705    .   -   .   ID=gene:ENSG00000169189;Parent=transcript:ENST00000567710
16  ensembl_havana  intron  272932  273474  .   -   .   ID=gene:ENSG00000076344;Parent=transcript:ENST00000316163
16  ensembl_havana  intron  272932  273474  .   -   .   ID=gene:ENSG00000076344;Parent=transcript:ENST00000359740
16  ensembl_havana  intron  272932  273474  .   -   .   ID=gene:ENSG00000076344;Parent=transcript:ENST00000397770

出来

16  ensembl_havana  intron  27257582    27268705    .   -   .   ID=gene:ENSG00000169189_1;Parent=transcript:ENST00000361439
16  ensembl_havana  intron  27257582    27268705    .   -   .   ID=gene:ENSG00000169189_2;Parent=transcript:ENST00000563273
16  ensembl_havana  intron  27268375    27268705    .   -   .   ID=gene:ENSG00000169189_3;Parent=transcript:ENST00000567710
16  ensembl_havana  intron  272932  273474  .   -   .   ID=gene:ENSG00000076344_1;Parent=transcript:ENST00000316163
16  ensembl_havana  intron  272932  273474  .   -   .   ID=gene:ENSG00000076344_2;Parent=transcript:ENST00000359740
16  ensembl_havana  intron  272932  273474  .   -   .   ID=gene:ENSG00000076344_3;Parent=transcript:ENST00000397770

【问题讨论】:

    标签: awk


    【解决方案1】:

    请您尝试关注一下。

    awk '
    match($0,/ID=gene:[^;]*/){
      val=substr($0,RSTART,RLENGTH)
      split(val,array,":")
      print substr($0,1,RSTART-1) array[1] ":" array[2] "_" ++b[array[2]] substr($0,RSTART+RLENGTH)
    }
    '  Input_file
    

    说明:为上述代码添加详细说明。这仅用于解释运行代码使用上述代码的目的。

    awk '                                            ##Starting awk program from here.
    match($0,/ID=gene:[^;]*/){                       ##Using match function to match ID=gene: till first occurrence of semi-colon.
      val=substr($0,RSTART,RLENGTH)                  ##Creating ariable val whose value is sub-string, whose starting is RSTART till RLENGTH value.
      split(val,array,":")                           ##Splitting variable val into an array with array by setting delimiter as semi-colon.
      print substr($0,1,RSTART-1) array[1] ":" \     ##Printing sub-string from 1 to RSTART then array[1] : array[2] _ increasing value of array b whose index is value of array[2] sub-string starting from RSTART+RLENGTH.
            array[2] "_" ++b[array[2]] \
            substr($0,RSTART+RLENGTH)
    }
    '  Input_file                                    ##Mentioning Input_file name here.
    

    输出如下。

    16  ensembl_havana  intron  27257582    27268705    .   -   .   ID=gene:ENSG00000169189_1;Parent=transcript:ENST00000361439
    16  ensembl_havana  intron  27257582    27268705    .   -   .   ID=gene:ENSG00000169189_2;Parent=transcript:ENST00000563273
    16  ensembl_havana  intron  27268375    27268705    .   -   .   ID=gene:ENSG00000169189_3;Parent=transcript:ENST00000567710
    16  ensembl_havana  intron  272932  273474  .   -   .   ID=gene:ENSG00000076344_1;Parent=transcript:ENST00000316163
    16  ensembl_havana  intron  272932  273474  .   -   .   ID=gene:ENSG00000076344_2;Parent=transcript:ENST00000359740
    16  ensembl_havana  intron  272932  273474  .   -   .   ID=gene:ENSG00000076344_3;Parent=transcript:ENST00000397770
    

    【讨论】:

      【解决方案2】:
      $ cat tst.awk
      BEGIN { FS=OFS="\t" }
      {
          split($NF,vals,/;/)
          $NF = vals[1] "_" ++cnt[vals[1]] ";" vals[2]
          print
      }
      
      $ awk -f tst.awk file
      16      ensembl_havana  intron  27257582        27268705        .       -       .       ID=gene:ENSG00000169189_1;Parent=transcript:ENST00000361439
      16      ensembl_havana  intron  27257582        27268705        .       -       .       ID=gene:ENSG00000169189_2;Parent=transcript:ENST00000563273
      16      ensembl_havana  intron  27268375        27268705        .       -       .       ID=gene:ENSG00000169189_3;Parent=transcript:ENST00000567710
      16      ensembl_havana  intron  272932  273474  .       -       .       ID=gene:ENSG00000076344_1;Parent=transcript:ENST00000316163
      16      ensembl_havana  intron  272932  273474  .       -       .       ID=gene:ENSG00000076344_2;Parent=transcript:ENST00000359740
      16      ensembl_havana  intron  272932  273474  .       -       .       ID=gene:ENSG00000076344_3;Parent=transcript:ENST00000397770
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-10-22
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        • 2015-07-05
        • 1970-01-01
        • 1970-01-01
        • 2012-12-15
        相关资源
        最近更新 更多