Linux环境下CSV转指定JSON格式并生成百万条记录的方法咨询
Linux环境下CSV转目标JSON并批量生成100万条记录实现方案
1. 现有sample1.txt转换为目标JSON格式
直接使用Linux原生awk工具即可完成转换,无需额外安装依赖,处理效率极高:
awk -F ',' ' { # 去除每个字段的双引号、前后空格 gsub(/^[ "]+|[ "]+$/, "", $1) gsub(/^[ "]+|[ "]+$/, "", $2) gsub(/^[ "]+|[ "]+$/, "", $3) gsub(/^[ "]+|[ "]+$/, "", $4) # 拼接基础JSON结构 json_str = sprintf("{\"id\":\"%s\",\"role\":\"%s\",\"created_time_stamp\":\"%s\"", $1, $2, $3) # 第四字段非空则追加q_id字段 if ($4 != "") { json_str = json_str sprintf(",\"q_id\":\"%s\"", $4) } # 闭合JSON结构并输出 print json_str "}" }' sample1.txt
执行后输出结果完全匹配你提供的目标格式。
2. 批量生成100万条符合格式的记录
根据需求不同有两种实现方案:
方案1:基于现有4条样例循环复制生成
如果不需要全新随机数据,仅需要现有格式重复即可,执行以下命令几秒即可完成:
# 先将现有4条转换为模板文件 awk -F ',' ' { gsub(/^[ "]+|[ "]+$/, "", $1) gsub(/^[ "]+|[ "]+$/, "", $2) gsub(/^[ "]+|[ "]+$/, "", $3) gsub(/^[ "]+|[ "]+$/, "", $4) json_str = sprintf("{\"id\":\"%s\",\"role\":\"%s\",\"created_time_stamp\":\"%s\"", $1, $2, $3) if ($4 != "") { json_str = json_str sprintf(",\"q_id\":\"%s\"", $4) } print json_str "}" }' sample1.txt > template.jsonl # 循环复制25万次得到100万条记录(4*250000=1000000) yes "$(<template.jsonl)" | head -n 250000 > output_1m.jsonl
生成完成后可执行wc -l output_1m.jsonl校验行数是否为100万。
方案2:生成100万条不重复的随机新记录
如果需要每条都是全新的符合格式的记录,可使用以下脚本,100万条生成耗时在10秒以内:
awk -v count=1000000 ' BEGIN { # 预设角色可选值 roles[1] = "FS_SE" roles[2] = "FS_MG" roles[3] = "FS_TC" roles[4] = "FS_SP" # 预设月份缩写 months[1] = "JAN"; months[2] = "FEB"; months[3] = "MAR"; months[4] = "APR" months[5] = "MAY"; months[6] = "JUN"; months[7] = "JUL"; months[8] = "AUG" months[9] = "SEP"; months[10] = "OCT"; months[11] = "NOV"; months[12] = "DEC" # 循环生成指定条数记录 for (i=0; i<count; i++) { # 生成随机id:小写字母+3位数字 id = sprintf("%c%03d", 97 + int(rand()*26), int(rand()*1000)) # 随机选择角色 role = roles[int(rand()*4)+1] # 生成随机日期 day = int(rand()*28)+1 mon = months[int(rand()*12)+1] year = 19 + int(rand()*6) time_str = sprintf("%02d-%s-%02d", day, mon, year) # 拼接JSON json_str = sprintf("{\"id\":\"%s\",\"role\":\"%s\",\"created_time_stamp\":\"%s\"", id, role, time_str) # 30%概率生成q_id字段 if (rand() < 0.3) { q_id = sprintf("P%02dC%03d.DB.ATC.COM - %d", int(rand()*100), int(rand()*1000), int(rand()*10000)) json_str = json_str sprintf(",\"q_id\":\"%s\"", q_id) } print json_str "}" } }' > random_output_1m.jsonl
内容的提问来源于stack exchange,提问作者prat_86
相关产品推荐
相关产品推荐

