基于首字段分割大文件(非连续重复需生成新文件)并添加唯一标识
解决方案:用AWK实现按首字段动态分割文件(重复字段重新出现时生成新文件)
这需求用AWK就能完美解决,我平时处理这类文本分割需求也常用它,核心思路就是跟踪前一行的首字段,每次发现当前行首字段和前一行不同时,就切换到新的输出文件并递增计数。下面是直接可用的脚本:
awk '{ # 提取当前行的第一个字段 current_field = $1 # 如果当前字段和上一行不同,切换输出文件 if (current_field != previous_field) { # 递增计数器,用于生成文件后缀 file_count++ # 关闭之前的文件句柄,避免打开过多文件导致报错 close(output_file) # 拼接新的输出文件名,格式为「字段值.计数器」 output_file = current_field "." file_count } # 将当前行写入对应的输出文件 print > output_file # 更新上一行字段为当前值,供下一次判断使用 previous_field = current_field }' test_file
脚本细节说明:
- 字段跟踪逻辑:通过
previous_field变量记录上一行的首字段,每次和当前行的current_field对比,判断是否需要切换文件 - 重复字段处理:
file_count变量每次切换时递增,哪怕同一个字段(比如示例中的a)再次出现,只要和前一行不同,就会生成带新后缀的文件(比如a.3) - 资源管理:
close(output_file)是必须的,AWK默认不会自动关闭文件,不关闭的话处理大文件时很容易触发「打开文件过多」的系统错误 - 文件名格式:严格按照你需要的
字段值.序号格式生成,刚好对应你要的a.1、b.2、a.3、c.4这四个结果
运行这个脚本后,你就能得到符合要求的四个文件啦。
内容的提问来源于stack exchange,提问作者maria
相关产品推荐
相关产品推荐

