代码之家  ›  专栏  ›  技术社区  ›  justaguy

awk或sed删除字段中最后一位之后的文本

  •  1
  • justaguy  · 技术社区  · 8 年前

    在 tab-delimited $1 . 我试过两次 sed 命令和接近,但不是期望的输出。我不知道我用的是不是最好的方法。谢谢:)。

    文件

    chr7:55249071C>T    EGFR
    chr7:55242469_55242477delTTAAGAGAAG EGFR
    

    期望输出

    chr7:55249071   EGFR
    chr7:55242469_55242477  EGFR
    

    塞德

    sed 's/[0-9]//g' file
    
    chr:C>T EGFR
    chr:_delTTAAGAGAAG  EGFR
    
    sed 's/[a-z]//g' file
    
    7:55249071C>T   EGFR
    7:55242469_55242477TTAAGAGAAG   EGFR
    
    3 回复  |  直到 8 年前
        1
  •  2
  •   Sundeep    8 年前

    $ awk 'BEGIN{FS=OFS="\t"} {sub(/[^0-9]+$/, "", $1)} 1' ip.txt
    chr7:55249071   EGFR
    chr7:55242469_55242477  EGFR
    
    • BEGIN{FS=OFS="\t"} 将输入和输出字段分隔符设置为制表符
    • sub(/[^0-9]+$/, "", $1) sed
    • 1 $0
        2
  •  1
  •   oguz ismail FCulig    8 年前

    如果保证您的输入只有两个制表符分隔的字段,那么您可以使用:

    sed 's/[^0-9]\+\t/\t/' file
    
        3
  •  1
  •   potong    8 年前

    这可能适用于您(GNU-sed):

    sed 's/\(.*[0-9]\)\S\+/\1/' file
    

    匹配到最后一个数字并存储为反向引用,并删除其后的所有非空格字符。

    推荐文章