【问题标题】:How to remove partial redundent patterns in each raws?如何删除每行中的部分冗余模式?
【发布时间】:2022-11-17 18:25:37
【问题描述】:

我有一个这样的文件:

reference   25038   A   G   39134   1   TPPH54  TPPH49  TPPH50  TPPHL51 TPPH52  TPPH53  TPPH55  p.Thr10198Thr
reference   77940   T   C   5131    1   TPPH54  TPPH49  p.Asn898Asp
reference   77940   T   C   5131    1   TPPH29  TPPH30  TPPH32  p.Gly48Gly

我想得到:

reference   25038   A   G   39134   1   TPPH54  p.Thr10198Thr
reference   77940   T   C   5131    1   TPPH54  p.Asn898Asp
reference   77940   T   C   5131    1   TPPH29  p.Gly48Gly

如何在第一个(总是 7 美元)之后的 awk/sed/grep 模式中删除所有具有相同开头的模式?

我在想这样的事情:

  • 只打印前 7 列和最后一列

    粘贴 <(awk '{print $1, $2, $3, $4, $5, $6, $7}' 文件) <(awk '{print ?????}' file-tmp) > file-final

但我不知道如何获得最后一个,因为每个原始数字可能不同

  • 或“扫描”文件直到有“TPPH”开头的表达式,保留第一个并为每个原始文件删除其他的。我不知道该怎么做

非常感谢您的帮助!

【问题讨论】:

    标签: awk sed grep


    【解决方案1】:

    使用sed

    $ sed -E ':a;s/(([^ 	]*[ 	]+){6}TPPH[0-9]+)[ 	]+TPPH[^ 	]*[ 	]+/	/;ta' input_file
    reference   25038   A   G   39134   1   TPPH54  p.Thr10198Thr
    reference   77940   T   C   5131    1   TPPH54  p.Asn898Asp
    reference   77940   T   C   5131    1   TPPH29  p.Gly48Gly
    

    【讨论】:

    • 太棒了,比“sed -E 's/(([^ ]*[ ]+){7}).*[ ]+/ /' 文件”更好。谢谢!
    【解决方案2】:

    使用 GNU awk 中显示的示例,请尝试遵循 awk 代码。使用 awk 的 match 函数,其中使用正则表达式捕获所需的部分,进一步创建 2 个捕获组并将它们保存到名为 arr 的数组中,索引为 1,2 等等。然后根据需要的输出打印它们的值。

    awk '
    match($0,/^(S+s+S+s+S+s+S+s+S+s+S+s+S+).*[[:space:]]+(S+)/,arr){
      print arr1,arr2
    }
    ' Input_file
    

    【讨论】:

    • 非常感谢您的快速回答!由于“awk:第 2 行:位于或附近的语法错误”,它无法正常工作。我不确定你的代码中的 arr、arr1 和 arr2
    • @vmicrobio,已在移动设备上编写,因此无法对其进行测试,但这应该可以恕我直言。请您确认是否已完全复制,请让我知道干杯。
    【解决方案3】:

    你可以这样做:

    awk '{print $1, $2, $3, $4, $5, $6, $7, $NF}' file | column -t
    reference  25038  A  G  39134  1  TPPH54  p.Thr10198Thr
    reference  77940  T  C  5131   1  TPPH54  p.Asn898Asp
    reference  77940  T  C  5131   1  TPPH29  p.Gly48Gly
    

    此处column -t 仅用于表格显示。

    【讨论】:

      猜你喜欢
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多