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

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

我有一个如下所示的文件:

chr22   43089055    43089055    -   NM_017436   C   300 903delC
chr22   43089715-43089717   43089715-43089717   -   NM_017436   CTT 79

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

chr22   43089055    43089055    -   NM_017436   C   300 903delC
chr22   43089715-43089717   43089717    -   NM_017436   CTT 79

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

答案1

Perl 来拯救:

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

答案2

作为一些不同的变体

  1. awk

    awk '{$3=A[split($3,A,"-")]}1' file

  2. sed

    sed -r 's/((\S+\s+){2})[^- ]+-/\1/' file

答案3

使用awk

< input awk 'BEGIN {FS=OFS="   "} {gsub(/[^-]*-/, "", $3); print}'

相关内容