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

时间:2018-10-23 12:37:05

标签: awk sed

在下面的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 个答案:

答案 0 :(得分:2)

您可以使用否定字符类和锚点仅在字符串末尾删除

$ 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的内容

答案 1 :(得分:1)

如果可以确保您的输入只有两个制表符分隔的字段,则可以使用以下方法:

sed 's/[^0-9]\+\t/\t/' file

答案 2 :(得分:1)

这可能对您有用(GNU sed):

void printArray(Queue &myQueue){
    for (int i = 0; i < myQueue.list.size(); i++){
        cout << myQueue.list.at(i) << ", ";
    }
    cout << endl;
}

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