按条件复制行指定值 替换表格第一列FALSE为对应主蛋白ID
蛋白质数据集批量替换实现方案
核心逻辑
每个蛋白条目区块中,将数据行第一列的FALSE替换为当前区块首行第三列的主蛋白ID值。
原始数据集示例
High Master Protein Q8WHN2 Checked Confidence Annotated Sequence FALSE High [K].GWSVNIEYTDDPHPR.[N] FALSE High [R].LTQGTFSFLPDLTDDQISK.[Q] FALSE High [-].MRLTQGTFSFLPDLTDDQISK.[Q] High Master Protein A0A345UA09 Checked Confidence Annotated Sequence FALSE High [R].DGEIILR.[Y] FALSE High [R].DGEIILRYVSYSLLAGDPSVLEDR.[C] FALSE High [-].MIDAFSR.[VIT] FALSE High [R].YVSYSLLAGDPSVLEDR.[C]
预期处理结果示例
High Master Protein Q8WHN2 Checked Confidence Annotated Sequence Q8WHN2 High [K].GWSVNIEYTDDPHPR.[N] Q8WHN2 High [R].LTQGTFSFLPDLTDDQISK.[Q] Q8WHN2 High [-].MRLTQGTFSFLPDLTDDQISK.[Q] High Master Protein A0A345UA09 Checked Confidence Annotated Sequence A0A345UA09 High [R].DGEIILR.[Y] A0A345UA09 High [R].DGEIILRYVSYSLLAGDPSVLEDR.[C] A0A345UA09 High [-].MIDAFSR.[VIT] A0A345UA09 High [R].YVSYSLLAGDPSVLEDR.[C]
实现方法
方法1:awk 命令行快速处理(适合单文件批量处理)
如果数据集是以制表符作为分隔符,直接执行以下命令即可:
awk 'BEGIN{FS=OFS="\t"} /^High/{current_pid=$3} /^FALSE/{$1=current_pid}1' input.txt > output.txt
- 逻辑说明:
- 首先设置输入输出分隔符为制表符
- 匹配到以
High开头的行时,提取第三列内容作为当前区块的蛋白ID - 匹配到以
FALSE开头的数据行时,将第一列替换为存储的蛋白ID - 所有行原样输出到新文件
如果数据集是用多个空格分隔,修改分隔符设置即可:
awk 'BEGIN{FS="\\s+";OFS="\t"} /^High/{current_pid=$3} /^FALSE/{$1=current_pid}1' input.txt > output.txt
方法2:Python 代码实现(适合二次开发集成)
current_pid = "" # 替换为你的输入输出文件路径 with open("input.txt", "r", encoding="utf-8") as f_in, open("output.txt", "w", encoding="utf-8") as f_out: for line in f_in: line = line.rstrip("\n") parts = line.split("\t") # 若为多空格分隔改为 parts = line.split() if parts[0] == "High": current_pid = parts[2] f_out.write(line + "\n") elif parts[0] == "FALSE": parts[0] = current_pid f_out.write("\t".join(parts) + "\n") else: f_out.write(line + "\n")
内容的提问来源于stack exchange,提问作者Gianluca Bizzaro
相关产品推荐
相关产品推荐

