You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将methyKit输出的大型CpG甲基化文件转换为BED格式?

用Awk批量转换methyKit输出为简化BED格式

我需要把R包methyKit生成的CpG甲基化结果转成简易BED格式,因为文件体积太大,Excel根本处理不了,试过Seqmonk也导出不了需要的格式,想用Linux的Awk工具来做,但不太熟悉。需要完成这些操作:

  • 去掉chr列的chr前缀
  • 新增stop列,值为base列数值加1
  • 把strand列的F替换成+,R替换成-
  • 将freqC保留两位小数

输入示例

chrBase chr base    strand  coverage  freqC   freqT
chr1.339    chr1    339 F   7      0.00   100.00
chr1.183    chr1    183 R   4      0.00   100.00
chr1.192    chr1    192 R   6      0.00   100.00
chr1.340    chr1    340 R   5      40.00  60.00
chr1.10007  chr1    10007   F   13     53.85  46.15
chr1.10317  chr1    10317   F   8      0.00   100.00
chr1.10346  chr1    10346   F   9      88.89  11.11
chr1.10349  chr1    10349   F   9      88.89  11.11

输出示例

chr	start	stop	freqc	Coverage	strand
1	339	340	0.00	7	+
1	183	184	0.00	4	-
1	192	193	0.00	6	-
1	340	341	40.00	5	-
1	10007	10008	53.85	13	+
1	10317	10318	0.00	8	+
1	10346	10347	88.89	9	+
1	10349	10350	88.89	9	+

解决方案:Awk命令

直接在终端运行以下命令,把input.txt替换为你的实际输入文件名,output.bed替换为目标输出文件名:

awk 'BEGIN{OFS="\t"} 
     NR==1{print "chr", "start", "stop", "freqc", "Coverage", "strand"; next} 
     {
       sub(/^chr/,"",$2); 
       stop=$3+1; 
       strand=($4=="F")?"+":"-"; 
       printf "%s\t%d\t%d\t%.2f\t%d\t%s\n", $2, $3, stop, $5, $6, strand
     }' input.txt > output.bed

命令说明:

  • BEGIN{OFS="\t"}:设置输出字段分隔符为制表符,保证格式规整
  • NR==1:单独处理第一行表头,输出自定义的BED格式表头后跳过原表头
  • sub(/^chr/,"",$2):移除第二列(chr列)开头的chr前缀
  • stop=$3+1:计算stop列值(BED格式为左闭右开区间,因此stop是base值加1)
  • strand=($4=="F")?"+":"-":将strand列的F转为+,R转为-
  • printf:按指定格式输出内容,%.2f确保freqC保留两位小数

内容的提问来源于stack exchange,提问作者Link Humble

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 06:27:29