使用 awk 删除字符串 id 中的小数位
remove decimal places in strings ids using 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
如何只删除第一个字段中的小数位?
谢谢
您可以将字段分隔符设置为点并打印第一个元素:
$ awk -F. '{print }' file
ENSG00000166224
ENSG00000102897
ENSG00000168496
ENSG00000010295
ENSG00000147533
ENSG00000119242
在 sed
中你会说 sed 's/\.[^\.]*$//' file
,这将捕获从最后一个点开始的所有内容并将其删除。
如果它只是一个数字,您可以使用 printf
来完成。然后,你会使用一些东西来不打印小数位。但是,由于它是字母数字字符串,因此最好将其作为字符串处理。
更新
使用 gsub
替换第一个字段中 .
的所有内容:
$ awk '{gsub(/\..*$/,"",)}1' a
ENSG00000166224 0.0730716237772557 -0.147970450702234
ENSG00000102897 0.156405616866614 -0.0398488625782745
ENSG00000168496 -0.110396121325736 -0.0147093758392248
也使用子函数。
awk '{sub(/\..*/, "")}1' file
使用cut
:
$ cut -d. -f1 file
ENSG00000166224
ENSG00000102897
ENSG00000168496
ENSG00000010295
ENSG00000147533
ENSG00000119242
如果您正在寻找 perl 中的解决方案
perl -pne 's/\..*$//' file.txt
这最终会删除小数点后的所有内容。
我想从标识符列表中删除字符串中的小数位:
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
如何只删除第一个字段中的小数位?
谢谢
您可以将字段分隔符设置为点并打印第一个元素:
$ awk -F. '{print }' file
ENSG00000166224
ENSG00000102897
ENSG00000168496
ENSG00000010295
ENSG00000147533
ENSG00000119242
在 sed
中你会说 sed 's/\.[^\.]*$//' file
,这将捕获从最后一个点开始的所有内容并将其删除。
如果它只是一个数字,您可以使用 printf
来完成。然后,你会使用一些东西来不打印小数位。但是,由于它是字母数字字符串,因此最好将其作为字符串处理。
更新
使用 gsub
替换第一个字段中 .
的所有内容:
$ awk '{gsub(/\..*$/,"",)}1' a
ENSG00000166224 0.0730716237772557 -0.147970450702234
ENSG00000102897 0.156405616866614 -0.0398488625782745
ENSG00000168496 -0.110396121325736 -0.0147093758392248
也使用子函数。
awk '{sub(/\..*/, "")}1' file
使用cut
:
$ cut -d. -f1 file
ENSG00000166224
ENSG00000102897
ENSG00000168496
ENSG00000010295
ENSG00000147533
ENSG00000119242
如果您正在寻找 perl 中的解决方案
perl -pne 's/\..*$//' file.txt
这最终会删除小数点后的所有内容。