如何删除每个原始文件中的部分冗余模式?

vmi*_*bio 7 awk grep sed

我有一个这样的文件:

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
Run Code Online (Sandbox Code Playgroud)

我想得到:

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
Run Code Online (Sandbox Code Playgroud)

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

我在想这样的事情:

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

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

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

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

预先非常感谢您的帮助!

anu*_*ava 8

你可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

这里column -t仅用于表格显示。


Hat*_*ess 4

使用sed

$ sed -E ':a;s/(([^ \t]*[ \t]+){6}TPPH[0-9]+)[ \t]+TPPH[^ \t]*[ \t]+/\1\t/;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
Run Code Online (Sandbox Code Playgroud)