【问题标题】:How to remove delimiter and following string, after the delimiter appears for the second time, in all lines and columns如何在分隔符第二次出现后,在所有行和列中删除分隔符和后续字符串
【发布时间】:2019-05-22 01:35:25
【问题描述】:

我有一个大表(数百万行乘数百列,以制表符分隔),前三列如下所示:

GT:DS:GP    0|0:0.181:0.827,0.165,0.008 0|0:0.181:0.827,0.165,0.008 0|0:0.181:0.827,0.165,0.008
GT:DS:GP    0|0:0.109:0.894,0.103,0.003 0|0:0.109:0.894,0.103,0.003 0|0:0.109:0.894,0.103,0.003
GT:DS:GP    0|0:0.004:0.996,0.004,0.000 0|0:0.004:0.996,0.004,0.000 0|0:0.004:0.996,0.004,0.000
GT:DS:GP    0|0:0.117:0.886,0.110,0.003 0|0:0.117:0.886,0.110,0.003 0|0:0.117:0.886,0.110,0.003

所有剩余的列看起来像第 2 列和第 3 列。我需要一个基于第一个文件的新文件,没有第二个冒号 (:) 之后的文本。输出应如下所示:

GT:DS   0|0:0.181   0|0:0.181   0|0:0.181
GT:DS   0|0:0.109   0|0:0.109   0|0:0.109
GT:DS   0|0:0.004   0|0:0.004   0|0:0.004
GT:DS   0|0:0.117   0|0:0.117   0|0:0.117

我觉得这可能与我在this post 中找到的内容类似,但显然 exit 命令告诉它在第一次出现后停止,因此它不适用于多次出现(在多行/多列中) )...

awk -v RS=':' -v ORS=':' 'NR==1{print} NR==2{print; printf"\n";exit}' input > output

这次失败尝试的输出是:

GT:DS:

提前感谢您的帮助!

【问题讨论】:

    标签: bash shell awk sed


    【解决方案1】:
    $ sed 's/\([^:]*:[^:]*\):[^:\t]*/\1/g' file
    GT:DS   0|0:0.181       0|0:0.181       0|0:0.181
    GT:DS   0|0:0.109       0|0:0.109       0|0:0.109
    GT:DS   0|0:0.004       0|0:0.004       0|0:0.004
    GT:DS   0|0:0.117       0|0:0.117       0|0:0.117
    

    【讨论】:

      猜你喜欢
      • 2016-05-27
      • 1970-01-01
      • 2014-08-08
      • 2021-08-05
      • 2014-10-08
      • 1970-01-01
      • 2023-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多