去除基因id后的小数点信息
2018-11-15 本文已影响51人
苏牧传媒
有的文件geneid带有版本信息需要去掉,以匹配其他文件:

要匹配的文件如:

命令:
awk 'BEGIN{OFS="\t"} {gsub(/.[0-9]$/,"",$4); print $0}' mm10.ensembl.ref.bed | head
原理:
此bed文件的第四列,使用gsub进行替换,将符合/.[0-9]$/的替换成""空格。
如果有多列,怎用gsub多次,加;即可。

好像有bug,有的去掉后还剩余小数点,咋回事?

原来是有的后面是是两个!坑爹呀!
看了原始教程:
http://www.endmemo.com/program/R/gsub.php
发现自己理解有误:
改为:
awk 'BEGIN{OFS="\t"} {gsub(/[:.:][0-9]/,"",$4); print $0}' mm10.gencode-vm18.compre.bed > 1.txt
使用awk-length查看:
awk '{print length($4)}' 1.txt | sort | uniq -c


重要!
awk 'BEGIN{OFS="\t"} {gsub(/[:.:].{1,2}/,"",$4); print $0}' mm10.gencode-vm18.compre.bed > 1.txt
{1,2}意思是.号要匹配一到两次
或者:
awk 'BEGIN{OFS="\t"} {gsub(/[:.:].+/,"",$4); print $0}' mm10.gencode-vm18.compre.bed > 1.txt
+意思是至少匹配一次
查看,果然行:

!!!我常用的命令:
awk 'BEGIN{OFS="\t"} {gsub(/[:.:].+/,"",$1); print $0}' 1.txt > 2.txt
结论:正则匹配用的真不熟!

