合并单/多文本文件中相同表头的多肽结合预测表格的方法咨询
多肽结合预测结果表格批量提取合并方案
单文件表格提取合并实现
核心逻辑是先定位固定表头的特征,再过滤所有无关行,仅保留符合列数要求的有效数据:
- 过滤规则:
- 移除全由
-/=组成的分隔线行 - 移除标注为注释、统计说明的特征行
- 仅保留首次出现的表头,后续重复表头直接跳过
- 有效数据行要求字段数与表头完全一致,符合对应列的格式要求
- 移除全由
- 快速命令行实现(awk):
把代码中的占位符替换为你实际的文件特征即可使用:awk 'BEGIN{FS="\\s+"; OFS="\t"} /你的表头匹配正则/ && !head_flag {print; head_flag=1; next} /^[-=]+$|注释特征|统计特征/ {next} NF==实际列数 {print}' 输入文件.txt > 单文件合并结果.tsv
多文件合并为总表R实现方案
可以实现批量合并200+文件的全部数据,实现逻辑如下,代码可直接调整参数后运行:
# 加载依赖,未安装先运行 install.packages("tidyverse") library(tidyverse) # 自定义参数区,根据实际文件调整 file_folder <- "存放所有txt文件的文件夹完整路径" header_regex <- "^Peptide" # 匹配你表头的正则,比如表头首列为Peptide就用这个 fixed_col_num <- 5 # 替换为你的表格实际列数 exclude_regex <- "^[-=]+$|^# |^Comment|^Statistics" # 匹配无关行的正则 # 批量读取处理 all_file_paths <- list.files(file_folder, pattern = "\\.txt$", full.names = T) total_table <- map_dfr(all_file_paths, function(file_path){ lines <- readLines(file_path, warn = F) # 定位首次出现的表头 header_idx <- which(str_detect(lines, header_regex))[1] if(is.na(header_idx)) return(tibble()) col_names <- str_split_1(str_squish(lines[header_idx]), "\\s+") # 过滤有效数据行 valid_lines <- lines[(header_idx+1):length(lines)] %>% str_squish() %>% .[str_detect(., exclude_regex, negate = T)] %>% .[str_count(., "\\s+") == fixed_col_num -1] if(length(valid_lines) == 0) return(tibble()) # 转为数据框,可新增来源文件列方便溯源 df <- read_delim(I(valid_lines), delim = " ", col_names = col_names, show_col_types = F) df$source_file <- basename(file_path) return(df) }) # 导出总表 write_tsv(total_table, "多肽结合预测结果总表.tsv")
- 调整提示:
- 如果你的文件列原本就是制表符分隔,把代码中所有分割用的
\\s+替换为\\t即可 - 可根据你实际遇到的无关内容的特征,灵活补充
exclude_regex的匹配规则
- 如果你的文件列原本就是制表符分隔,把代码中所有分割用的
内容的提问来源于stack exchange,提问作者Douglas
相关产品推荐
相关产品推荐

