如何使用for循环配合sed命令从文本文件提取数据并存储到多个新文件
for循环结合sed实现方案
你可以直接通过bash循环遍历原子序号,批量生成sed命令完成提取,实现代码如下:
# 配置参数:根据你的实际情况调整 frame_length=11217 # 单帧数据的总行数 atom_count=11214 # 每帧包含的原子数据行数 for idx in $(seq 1 ${atom_count}) do # 第idx个原子的首行位置是第一帧的起始原子行(第3行)+ idx - 1,步长为单帧长度 sed -n "$((idx + 2))~${frame_length}p" 你的输入文件名 > output${idx}.txt done
注意:该方案需要遍历11214次输入文件,百万行级别的数据会产生大量重复IO开销,运行速度较慢,仅适合小数据量场景使用。
更高效的awk单遍处理方案
针对大数据量场景,推荐使用awk只读取一次输入文件即可完成所有行的拆分输出,效率提升数十倍:
awk -v frame_len=11217 -v atom_count=11214 ' { # 计算当前行在单帧内的行号,从1开始计数 line_pos = (NR - 1) % frame_len + 1 # 仅处理原子数据行(单帧内第3行到第3+atom_count-1行) if (line_pos >= 3 && line_pos <= 2 + atom_count) { out_file = "output" (line_pos - 2) ".txt" print $0 >> out_file } }' 你的输入文件名
内容的提问来源于stack exchange,提问作者Mahesh
相关产品推荐
相关产品推荐

