在R中标准化文件:移除自动换行的解决方法
解决文本自动换行并按标识符拆分文件的方法
第一步:合并自动换行的记录
核心是先把被强制拆分的记录合并成完整一行,再进行后续拆分操作,以下是两种实用方案:
方案1:用awk命令行工具(高效快速)
假设你的标识符以**数字+**开头(如示例中的450、630~),用awk识别完整记录的起始行,自动合并断行:
awk ' /^[0-9]+~/ { if (prev != "") print prev prev = $0 next } { gsub(/^[[:space:]]+/, "", $0) # 移除断行开头的空格 prev = prev $0 } END { print prev } ' your_input_file.txt > merged_file.txt
逻辑说明:
- 匹配以数字+~开头的行(每条记录的首行),输出上一条完整记录后缓存当前行
- 非起始行则去掉开头空格,追加到缓存的记录中
- 最后输出剩余的缓存记录
方案2:用R语言处理
如果你习惯用R,可按以下步骤实现:
# 读取所有行并过滤空行 lines <- readLines("your_input_file.txt") lines <- lines[lines != ""] # 定位每条记录的起始行索引 start_idx <- grep("^[0-9]+~", lines) # 生成每个记录对应的行范围 record_ranges <- mapply(function(s, e) s:(e-1), start_idx, c(start_idx[-1], length(lines)+1)) # 合并每个记录的多行内容 merged_records <- sapply(record_ranges, function(idx) { paste(gsub("^\\s+", "", lines[idx]), collapse = "") }) # 保存合并后的完整记录文件 writeLines(merged_records, "merged_file.txt")
第二步:按第一列标识符拆分文件
合并完成后,可通过以下方式拆分:
用awk拆分
直接基于合并后的文件操作:
BEGIN { FS = "~" } { print > $1 ".txt" }
执行命令:awk -f split.awk merged_file.txt
说明:以~为分隔符,将每条记录写入以第一列标识符命名的文件(如450.txt、630.txt)
用my_splits工具
如果my_splits支持指定分隔符和拆分键,直接传入合并后的文件即可,示例命令(具体以工具文档为准):
my_splits --delimiter '~' --key-column 1 merged_file.txt
内容的提问来源于stack exchange,提问作者jjohnson1217
相关产品推荐
相关产品推荐

