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

两文件指定列匹配后修改file1第4列为pseudogene的实现方法

实现方案

方案说明

你需要的功能可以通过awk命令直接完成,awk天然支持结构化文本的字段读取、修改操作,比单纯用grep筛选后再拼接处理效率高很多。

精确匹配引号内基因名(推荐)

该方案会精准提取file1第13列引号内的基因名,和file2的内容做精确匹配,匹配成功则修改第4列为pseudogene,不会改动原行其他内容:

awk 'NR==FNR {
    gene_list[$0] = 1
    next
}
{
    sym = $13
    gsub(/^"|"[;]*$/, "", sym)
    if (sym in gene_list) {
        $4 = "pseudogene"
    }
    print
}' file2 file1 > output_file

如果你的file1是制表符分隔,需要保留原制表符格式,可以加上分隔符参数:

awk -F'\t' -v OFS='\t' 'NR==FNR {gene_list[$0]=1; next} {sym=$13; gsub(/^"|"[;]*$/, "", sym); if(sym in gene_list) $4="pseudogene"} 1' file2 file1 > output_file

部分匹配第13列内容

如果你确实需要只要file2的内容是第13列的子串就算匹配,可以用以下版本:

awk 'NR==FNR {
    gene_list[++count] = $0
    next
}
{
    for(i=1; i<=count; i++) {
        if(index($13, gene_list[i]) > 0) {
            $4 = "pseudogene"
            break
        }
    }
    print
}' file2 file1 > output_file

参数说明

  • NR==FNR:判断当前是否在处理第一个输入文件(即file2),将所有基因名存入数组
  • sym = $13:把第13列内容赋值给临时变量,避免修改原列的原有格式
  • gsub(/^"|"[;]*$/, "", sym):去除提取内容首尾的双引号和末尾分号,得到纯基因名
  • 末尾的1是awk简写语法,等价于打印所有处理后的行
  • 结果会输出到output_file中,不会修改原文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:18:04