使用Shell脚本批量生成含递增字段的重复记录
批量生成递增字段的CSV记录
问题背景
现有文件abc.txt,内容如下:
ID, date, timestamp, count, idcount, unit, code, Pcode, ccode, bid, vcode 12345432,10-11-2011,11:11:12.555,0,0,XVC_AS,12,14,19,123454323,qweds
需要编写Unix Shell脚本,生成指定数量(如1000条)的记录,要求仅ID、Pcode、ccode三个字段逐行递增,其余字段保持不变。输出示例如下:
12345432,10-11-2011,11:11:12.555,0,0,XVC_AS,12,14,19,123454323,qweds 12345433,10-11-2011,11:11:12.555,0,0,XVC_AS,12,15,20,123454323,qweds 12345434,10-11-2011,11:11:12.555,0,0,XVC_AS,12,16,21,123454323,qweds ...
解决方案
使用awk即可高效实现字段递增和批量生成,以下是完整脚本:
脚本代码
# 设置要生成的总记录数,按需修改 TOTAL_RECORDS=1000 awk -v total=$TOTAL_RECORDS ' BEGIN { FS = OFS = "," # 设置输入输出分隔符为逗号 } # 打印表头行 NR == 1 { print next } # 跳过空行(如果原始文件有) NR == 2 && $0 ~ /^$/ { next } # 处理原始数据行,生成批量记录 NR == 2 { # 保存三个字段的初始值 base_id = $1 base_pcode = $8 base_ccode = $9 # 打印第一条原始记录 print # 循环生成剩余的total-1条记录 for(i=1; i < total; i++){ # 递增指定字段 $1 = base_id + i $8 = base_pcode + i $9 = base_ccode + i # 先打印空行分隔,再打印记录(匹配示例格式) print "" print } } ' abc.txt > generated_records.csv
代码说明
- 变量传递:通过
-v total=$TOTAL_RECORDS将Shell中定义的总记录数传入awk - 分隔符设置:
FS=OFS=","确保输入输出都以逗号作为分隔符,保证CSV格式正确 - 表头处理:直接打印原始文件的表头行
- 空行跳过:跳过原始文件中表头和数据行之间的空行(如果存在)
- 字段递增逻辑:保存初始字段值后,循环中对ID、Pcode、ccode分别累加循环变量
i,生成新记录 - 格式匹配:每条新记录前打印空行,与示例输出的格式一致
使用方法
- 修改
TOTAL_RECORDS的值为你需要的记录数量(如1000) - 运行脚本,生成的记录会保存到
generated_records.csv文件中;若要直接在终端查看,可删除末尾的> generated_records.csv
内容的提问来源于stack exchange,提问作者Abhinandan Kumar
相关产品推荐
相关产品推荐

