在特定字符之前删除特定列中的字符

cos*_*ist 2 sed awk

我有一个看起来像这样的文件:

chr22   43089055    43089055    -   NM_017436   C   300 903delC
chr22   43089715-43089717   43089715-43089717   -   NM_017436   CTT 79
Run Code Online (Sandbox Code Playgroud)

我想删除第-3 列之前的所有字符,以提供如下所示的输出:

chr22   43089055    43089055    -   NM_017436   C   300 903delC
chr22   43089715-43089717   43089717    -   NM_017436   CTT 79
Run Code Online (Sandbox Code Playgroud)

awk '{$2+=0}1' file过去曾使用过删除 之后的字符-,但我不相信我可以对当前的问题使用相同的技术。有什么建议?

cho*_*oba 5

Perl 来拯救:

perl -lane 'BEGIN { $, = "\t" } $F[2] =~ s/.*-//; print @F' < file
Run Code Online (Sandbox Code Playgroud)
  • -l 将换行符附加到 print
  • -n 逐行读取输入
  • -a在空白处拆分每一行并填充@F数组
  • $, 打印时分隔列表成员,将其设置为制表符
  • s/.*-// 将所有内容替换为破折号,它绑定到第三列(数组从 0 开始索引)