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

基于eggnog mapper输出制作KO注释表格的问题求助

处理EggNOG Mapper注释表格生成KO格式表格(解决引号与多值拆分问题)

核心问题拆解

你的需求是将EggNOG Mapper输出的注释表转换为标准KO关联表,需要解决两个关键点:

  • 去除KO列中多余的引号
  • 拆分KO列中逗号分隔的多值,实现一行基因对应一行KO的格式

分步解决方案

1. 先将XLSX转为干净的TSV(避免转TXT时自动加引号)

如果还在使用XLSX源文件,优先用命令行工具转成制表符分隔的TSV,避免手动转TXT时的引号问题:

libreoffice --headless --convert-to tsv:Text -o ./ test.xlsx

执行后会生成test.tsv,这是无冗余格式的纯文本表格。

2. 清理引号并拆分多值

如果已经有带引号的TXT文件,先通过sed批量去除所有双引号,再用awk拆分KO列:

步骤1:去除所有引号
sed 's/"//g' test.txt > cleaned_test.txt
步骤2:拆分KO多值生成目标表

假设你的表格中:

  • 基因ID在第1列
  • KO列在第5列(根据实际列数调整)
  • 表格用制表符分隔(如果是逗号分隔,将-F'\t'改为-F',')

执行以下awk命令:

awk -F'\t' 'NR>1 {  # NR>1 跳过表头行,不需要则删除该条件
    split($5, ko_list, ",");
    for (i in ko_list) {
        # 去除KO值前后的空格(比如"K00001, K00002"拆分后可能带空格)
        gsub(/^[[:space:]]+|[[:space:]]+$/, "", ko_list[i]);
        print $1 "\t" ko_list[i];
    }
}' cleaned_test.txt > ko_final_table.txt

为什么之前的awk会陷入死循环?

大概率是因为带引号的逗号被awk误判为字段分隔符,导致字段解析混乱。先通过sed去掉所有引号后,awk可以正确识别KO列中的逗号分隔符,避免循环逻辑出错。

效率说明

17000行数据量很小,sed和awk都是原生高效工具,整个处理过程几秒内就能完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 03:05:19