次のデータがあります。
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,