使用awk删除字符串ID中的小数位

时间:2015-03-04 16:53:10

标签: awk

我想从标识符列表中删除字符串中的小数位:

ENSG00000166224.12
ENSG00000102897.5
ENSG00000168496.3
ENSG00000010295.15
ENSG00000147533.12
ENSG00000119242.4

我想要的输出是

ENSG00000166224
ENSG00000102897
ENSG00000168496
ENSG00000010295
ENSG00000147533
ENSG00000119242

我想用awk做这件事,我一直在玩printf但没有成功。

更新:

将字段分隔符设置为.的awk答案适用于只有一列的文件,但如果文件由不同的列(字符串和浮点数)组成,该怎么办? 这是一个例子:

ENSG00000166224.12  0.0730716237772557  -0.147970450702234
ENSG00000102897.5   0.156405616866614   -0.0398488625782745
ENSG00000168496.3   -0.110396121325736  -0.0147093758392248

如何只删除第一个字段中的小数位?

由于

4 个答案:

答案 0 :(得分:2)

您可以将字段分隔符设置为点并打印第一个元素:

$ awk -F. '{print $1}' file
ENSG00000166224
ENSG00000102897
ENSG00000168496
ENSG00000010295
ENSG00000147533
ENSG00000119242

sed中你会说sed 's/\.[^\.]*$//' file,它会抓住最后一个点上的所有内容并将其删除。

如果它只是一个数字,你可以用printf来做。然后,你会使用一些东西不打印小数位。但是,由于它是一个字母数字字符串,因此最好将其作为字符串处理。


更新

使用gsub替换第一个字段中.的所有内容:

$ awk '{gsub(/\..*$/,"",$1)}1' a
ENSG00000166224 0.0730716237772557 -0.147970450702234
ENSG00000102897 0.156405616866614 -0.0398488625782745
ENSG00000168496 -0.110396121325736 -0.0147093758392248

答案 1 :(得分:1)

也使用子功能。

awk '{sub(/\..*/, "")}1' file

答案 2 :(得分:1)

使用cut

$ cut -d. -f1 file
ENSG00000166224
ENSG00000102897
ENSG00000168496
ENSG00000010295
ENSG00000147533
ENSG00000119242

答案 3 :(得分:0)

如果您正在寻找perl的解决方案

perl -pne 's/\..*$//' file.txt

这最终会删除小数点后的所有内容。