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

如何用Bash或R处理超大CSV嵌套单元格,提取单行内容至独立文件

处理超大CSV文件:提取指定ID的嵌套内容或拆分文件

一、Bash工具方案(awk)

1. 提取每行ID对应的嵌套单元格内容到单独文件

针对每行仅含一对双引号的CSV格式,用awk直接处理可规避换行问题:

awk -F, '{
    id = $1;
    # 匹配双引号内的内容
    match($0, /"([^"]+)"/, arr);
    nested_content = arr[1];
    # 写入以ID命名的文件
    print nested_content > id".txt";
    close(id".txt"); # 关闭文件句柄,避免触发系统文件数上限
}' large_file.csv

2. 将整行内容写入对应ID的文件

如果需要保留整行数据,执行以下命令:

awk -F, '{
    id = $1;
    print $0 > id".csv";
    close(id".csv");
}' large_file.csv

注:若存在重复ID,后续行内容会追加到同一文件;若需覆盖,将>改为>即可。必须调用close(),否则处理大量ID时会因文件句柄耗尽报错。

二、R语言分块处理方案

针对150GB+的超大文件,需采用分块读取策略,以下提供两种实现方式:

1. 用readr分块提取嵌套内容

library(readr)
library(stringr)

# 定义单块数据处理函数
process_chunk <- function(chunk, pos) {
  # 提取ID和双引号内的嵌套内容
  chunk$id <- chunk[[1]]
  chunk$nested_content <- str_extract(chunk[[7]], '(?<=")[^"]+(?=")')
  # 逐行写入对应文件
  for (i in seq_len(nrow(chunk))) {
    writeLines(chunk$nested_content[i], paste0(chunk$id[i], ".txt"), append = TRUE)
  }
  return(NULL)
}

# 分块读取文件,每块10000行(可根据内存调整)
read_csv_chunked("large_file.csv", 
                 callback = DataFrameCallback$new(process_chunk),
                 chunk_size = 10000,
                 col_types = cols(.default = col_character())) # 统一按字符类型读取,避免解析错误

2. 用data.table分块拆分整行到ID文件

library(data.table)

chunk_size <- 10000
con <- file("large_file.csv", "r")
header <- readLines(con, n = 1) # 读取表头

# 循环读取并处理每块数据
while (length(chunk <- fread(con, nrows = chunk_size, header = FALSE, stringsAsFactors = FALSE)) > 0) {
  setnames(chunk, strsplit(header, ",")[[1]]) # 为数据块添加表头
  # 按ID分组写入文件
  chunk[, {
    write.table(.SD, paste0(.BY[[1]], ".csv"), 
                append = TRUE, sep = ",", row.names = FALSE, 
                col.names = !file.exists(paste0(.BY[[1]], ".csv")))
  }, by = ID] # 假设第一列表头为ID
}
close(con)

注:col.names = !file.exists(...)确保每个ID文件仅写入一次表头;若无需表头,可删除该参数。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:17:50