【问题标题】:repeating row by splitting particular columns value通过拆分特定列值重复行
【发布时间】:2017-05-18 06:42:41
【问题描述】:

伙计们,我有一个这样的文件:

Sequence ID TFBS_ID Binding sequence    TF_family   TF ID
CaCLV3_1    TFmatrixID_0009 taaaTTATTt  AT-Hook AT4G35390
CaCLV3_1    TFmatrixID_0009 aAATAAatat  AT-Hook AT4G35390
CaCLV3_1    TFmatrixID_0022 atcGGTAAct  Trihelix    AT5G28300
CaCLV3_1    TFmatrixID_0025 tcAATCAatt  Homeodomain;bZIP;HD-ZIP AT3G61890

我想通过拆分 TF_family 列来重复整行,该列有多个由“;”分隔的家庭我想要这样的输出,任何帮助:

Sequence ID TFBS_ID Binding sequence    TF_family   TF ID
CaCLV3_1    TFmatrixID_0009 taaaTTATTt  AT-Hook AT4G35390
CaCLV3_1    TFmatrixID_0009 aAATAAatat  AT-Hook AT4G35390
CaCLV3_1    TFmatrixID_0022 atcGGTAAct  Trihelix    AT5G28300
CaCLV3_1    TFmatrixID_0025 tcAATCAatt  Homeodomain AT3G61890
CaCLV3_1    TFmatrixID_0025 tcAATCAatt  bZIP    AT3G61890
CaCLV3_1    TFmatrixID_0025 tcAATCAatt  HD-ZIP  AT3G61890

【问题讨论】:

  • 如果您添加尝试解决此问题的代码,您将获得帮助

标签: linux unix awk sed row


【解决方案1】:

awk 方法:

awk 'NR==1{print}NR>1{split($4,a,";"); for(i=1;i<=length(a);i++){$4=a[i]; print $0}}' file

输出:

Sequence ID TFBS_ID Binding sequence    TF_family   TF ID
CaCLV3_1 TFmatrixID_0009 taaaTTATTt AT-Hook AT4G35390
CaCLV3_1 TFmatrixID_0009 aAATAAatat AT-Hook AT4G35390
CaCLV3_1 TFmatrixID_0022 atcGGTAAct Trihelix AT5G28300
CaCLV3_1 TFmatrixID_0025 tcAATCAatt Homeodomain AT3G61890
CaCLV3_1 TFmatrixID_0025 tcAATCAatt bZIP AT3G61890
CaCLV3_1 TFmatrixID_0025 tcAATCAatt HD-ZIP AT3G61890

  • NR==1{print} - 按原样打印第一行

  • split($4,a,";") - 用;分割第四个字段

  • for(i=1;i&lt;=length(a);i++){$4=a[i]; print $0} - 为每个子值重复当前记录

【讨论】:

    猜你喜欢
    • 2021-01-30
    • 2013-08-28
    • 2015-04-24
    • 2019-09-25
    • 2013-05-22
    • 2023-03-14
    • 2015-12-14
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多