如何删除一列中的点和数字?

如何删除一列中的点和数字?

我有这样的数据:

head l4
chr   pos a1 a2 a3 variant_id         pval_nominal gene_id
chr1 13550 G A b38 chr1_13550_G_A_b38 0.375614 ENSG00000227232.5
chr1 14671 G C b38 chr1_14671_G_C_b38 0.474708 ENSG00000227232.5
chr1 14677 G A b38 chr1_14677_G_A_b38 0.699887 ENSG00000227232.5

我想删除最后一列中的点和数字,它并不总是 5,它可以是任何数字

这样我就有这样的数据:

chr pos a1 a2 a3 variant_id pval_nominal gene_id
chr1 13550 G A b38 chr1_13550_G_A_b38 0.375614 ENSG00000227232
chr1 14671 G C b38 chr1_14671_G_C_b38 0.474708 ENSG00000227232
chr1 14677 G A b38 chr1_14677_G_A_b38 0.699887 ENSG00000227232

我试过这个:

sed 's/\..*$//' l4 > l4_clean

但这消除了许多其他事情。

答案1

只需应用更具体的正则表达式模式(以匹配数字/数字):

sed 's/\.[0-9]*$//' l4 > l4_clean

答案2

您只想修改最后一个字段,因此请使用可以处理字段的工具,例如awk.在 中awk,变量$NF是最后一个字段,因此您可以执行以下操作:

awk '{sub(/\..*/,"",$NF)}1' l4 > l4_clean

答案3

.如果最后一个字符可以是数字、字母或点 ( )之后的任何符号,则可以使用以下命令。

sed "s/\..$//g" filename

awk '{gsub(/\..*/,"",$NF);print $0}' filename

Python

#!/usr/bin/python
import re
k=re.compile(r'\..')
m=open('i.txt','r')
for i in m:
    p=re.sub(k,"",i)
    print p,

相关内容