我有这样的数据:
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,