列のドットと数字を削除する方法は?

列のドットと数字を削除する方法は?

次のデータがあります。

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,

関連情報