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

如何使用awk移除TSV文件指定列两个句点间的文本

处理orthologsClassification.tsv第4列格式方案

问题背景

需求为保留orthologsClassification.tsv文件其余列内容不变,仅删除第4列字段中两个句点之间的文本。
原文件内容示例:

t_gene          t_transcript           q_gene   q_transcript 
ENSG00000213096 ENST00000616028.ZNF254 reg_2133 ENST00000616028.ZNF254.2177
ENSG00000213096 ENST00000616028.ZNF254 reg_2053 ENST00000616028.ZNF254.2637

期望处理后效果:

t_gene          t_transcript           q_gene   q_transcript  
ENSG00000213096 ENST00000616028.ZNF254 reg_2133 ENST00000616028.2177
ENSG00000213096 ENST00000616028.ZNF254 reg_2053 ENST00000616028.2637

之前使用的命令存在逻辑问题:

awk '{sub(/\..*$/, "", $4)} 1' OFS='\t' orthologsClassification.tsv

该命令的正则/\..*$/会匹配第一个句点到字段末尾的所有内容,因此会把第4列第一个句点后的所有文本全部删除,例如ENST00000616028.ZNF254.2177会被错误处理为ENST00000616028,不符合预期。

正确实现命令

使用awk按列精准处理,命令如下:

awk 'BEGIN{FS=OFS="\t"} {sub(/\.[^.]+\./, ".", $4)} 1' orthologsClassification.tsv > corrected_orthologsClassification.tsv

命令逻辑说明

  • BEGIN{FS=OFS="\t"}:预先指定输入、输出的字段分隔符均为制表符,保证原文件的列分割格式不被破坏,其余列内容完全保留
  • sub(/\.[^.]+\./, ".", $4):仅对第4列执行替换操作,正则匹配「第一个句点 + 两个句点之间的所有非句点字符 + 第二个句点」的片段,将其替换为单个句点,刚好实现删除两个句点中间文本的效果
  • 末尾的1是awk的通用简写语法,等价于打印当前处理完成的所有行
  • 处理结果默认输出到新文件corrected_orthologsClassification.tsv,避免直接修改原文件导致数据丢失,确认结果符合预期后可再替换原文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 10:18:21