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

如何使用Linux、Python或Perl将TSV文件前三列合并为单列?

TSV文件前三列合并为新ID列的常用实现方法

以下是三种不同场景下的常用实现方案:

方法1:Linux awk命令行实现(适合快速处理大文件,无需额外依赖)

awk原生支持制表符分隔格式,一行命令即可完成处理:

  • 新ID列放在文件最前的命令:
    awk 'BEGIN{FS=OFS="\t"} NR==1{print "ID",$0} NR>1{print $1"_"$2"_"$3, $0}' variants.tsv > new_variants.tsv
  • 新ID列放在文件最后的命令:
    awk 'BEGIN{FS=OFS="\t"} NR==1{print $0,"ID"} NR>1{print $0, $1"_"$2"_"$3}' variants.tsv > new_variants.tsv
    参数说明:
  • BEGIN{FS=OFS="\t"}:指定输入输出的分隔符均为制表符,适配TSV格式
  • NR==1:匹配表头行,新增ID列的表头
  • NR>1:匹配数据行,将前三列内容以下划线拼接生成ID值

方法2:Python Pandas实现(适合需要后续做变异数据二次分析的场景)

该方案可读性高,方便衔接后续的变异过滤、注释等分析操作:

import pandas as pd

# 读取TSV文件,指定所有列为字符串格式,避免0开头的Barcode/样本ID被转成数值
df = pd.read_csv("variants.tsv", sep="\t", dtype=str)
# 拼接前三列生成ID列
df["ID"] = df["lane"] + "_" + df["sampleID"] + "_" + df["Barcode"]
# 可选操作:将ID列调整到表格最前面
df = df[["ID"] + [col for col in df.columns if col != "ID"]]
# 输出新TSV文件,不保留pandas自动生成的索引列
df.to_csv("new_variants.tsv", sep="\t", index=False)

方法3:R语言实现(适合生信分析R栈用户)

使用tidyverse语法完成,适配R生态的后续分析流程:

library(tidyverse)

# 读取TSV文件,指定所有列为字符型避免格式转换错误
df <- read_tsv("variants.tsv", col_types = cols(.default = "c"))
# 拼接前三列生成ID列
df <- df %>% mutate(ID = str_c(lane, sampleID, Barcode, sep = "_"))
# 可选操作:将ID列调整到表格最前面
df <- df %>% select(ID, everything())
# 输出新TSV文件
write_tsv(df, "new_variants.tsv")

内容的提问来源于stack exchange,提问作者Alhu.A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:39:00