如何根据第三列拆分数据行?数据格式转换技术咨询
拆分多行记录的简便方法
需求说明
需要将每行包含多组记录的数据,拆分为每行对应一组记录的格式:
原始数据
file_name text 1 2a.txt 0 0.712518 0.61525 0.43918 0.2065 1 0.635078 0.81175 0.292786 0.0925 2b.txt 2 0.551273 0.5705 0.30198 0.0922 0 0.550212 0.31125 0.486563 0.2455
目标格式
file_name text 2a.txt 0 0.712518 0.61525 0.43918 0.2065 2a.txt 1 0.635078 0.81175 0.292786 0.0925 2b.txt 2 0.551273 0.5705 0.30198 0.0922 2b.txt 0 0.550212 0.31125 0.486563 0.2455
简便实现方法
方法1:用awk命令(命令行快速处理)
直接用awk就能一键拆分,核心逻辑是提取文件名后,按每5个字段为一组循环输出:
NR==1 {print "file_name text "; next} { fname=$1 n=2 while (n <= NF) { printf "%-12s %-6s %-12s %-10s %-12s %-10s\n", fname, $(n), $(n+1), $(n+2), $(n+3), $(n+4) n +=5 } }
用法:
- 把上述代码保存为
split_records.awk - 执行命令:
awk -f split_records.awk 你的输入文件名.txt
或者直接用单行命令:
awk 'NR==1 {print "file_name text "; next} {fname=$1; n=2; while(n<=NF){printf "%-12s %-6s %-12s %-10s %-12s %-10s\n", fname, $(n), $(n+1), $(n+2), $(n+3), $(n+4); n+=5}}' input.txt
(注:printf是为了保证输出格式对齐,和目标格式一致)
方法2:用Python脚本(灵活自定义)
如果需要调整字段数或做额外处理,写个简单脚本更方便:
with open("input.txt", "r") as infile, open("output.txt", "w") as outfile: # 写入表头 outfile.write("file_name text \n") # 跳过第一行原始表头,处理数据行 for line in infile.readlines()[1:]: line = line.strip() if not line: continue parts = line.split() filename = parts[0] # 从第2个字段开始,每5个字段为一组 for i in range(1, len(parts), 5): group = parts[i:i+5] # 按格式拼接输出 out_line = f"{filename} {' '.join(group)}\n" outfile.write(out_line)
用法:运行脚本后,output.txt就是拆分好的结果。
内容的提问来源于stack exchange,提问作者Simon
相关产品推荐
相关产品推荐

