免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4876 | 回复: 10
打印 上一主题 下一主题

[文本处理] 复杂的csv文件转换为json [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-09-28 11:03 |只看该作者 |倒序浏览
导出一个csv文件(tst.csv)格式如下(仅列举2行,此文件数据量大):ORGNUMBER,ORGPATH,ORGNAME,SUBNODE,PNAME,GSHORTNAME,TDATE,SORGID
131025,0015000000/0015013737/,在册不在岗人员,0,分公司内部退养人员,内部退养人员,2015-11-02 00:00:36,[00150000000,0015013737]
52106532,0350000000/0065513737/,工程技术一分公司,1,公司工程技术公司工程技术一分公司机关,机关,2013-12-31 00:01:32,[0350000000,0065513737]

想转换为json格式,但是有些格式需要改变,主要是TDATE和SORGID列的类型变化
[{"ORGNUMBER":"131025","ORGPATH":"0015000000/0015013737/","ORGNAME":"在册不在岗人员","SUBNODE":"0","PNAME":"分公司内部退养人员","GSHORTNAME":"内部退养人员","TDATE":{"$date":"2015-11-02T00:00:36Z"},"SORGID":["00150000000","0015013737"]},
{"ORGNUMBER":"52106532","ORGPATH":"0350000000/0065513737/","ORGNAME":"工程技术一分公司","SUBNODE":"1","PNAME":"公司工程技术公司工程技术一分公司机关","GSHORTNAME":"机关","TDATE":{"$date":"2013-12-31T00:01:32Z"},"SORGID":["0350000000","0065513737"]}]


这个shell脚本可以实现么?我在用python处理,但是因为初学,写的不顺利,请大家个点建议,谢谢!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2016-09-28 11:44 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2016-09-28 13:20 |只看该作者
回复 2# jason680
嗯,这次要把以前的都放在一个程序里解决

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
4 [报告]
发表于 2016-09-28 13:40 |只看该作者

  1. sed -r '1{h;d};G;s/(.*)\n(.*)/\2\n\1/;:a;s/([^,]*),([^\n]*)\n([^,]*),/\1":"\3@\2\n/;ta;s/\n/":"/;s/@/,/g;s/[^,]*/"&"/g;s/.*/{&},/;s/(TDATE":)(\S+)\s+([^"]*)"/\1{"\$date":\2T\3Z"}/;s/(SORGID":)"\[([^]]*)]"/\1["\2"]/;2s/^/[/;$s/,$/]/' tst.csv
复制代码

论坛徽章:
0
5 [报告]
发表于 2016-09-28 13:48 |只看该作者
回复 4# moperyblue

谢谢,好厉害,这个sed我总是写不来啊!唉。。。。

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
6 [报告]
发表于 2016-09-28 14:00 |只看该作者
回复 5# hope1234567hope


这个你完全可以会 只要愿意多花时间去学

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
7 [报告]
发表于 2016-09-28 14:40 |只看该作者
回复 5# hope1234567hope

Here you are by awk

$ awk -F, -vq='"' 'function jx(s,n){gsub("[][]","",s);gsub(",",q","q,s);return(q a[n]q":["q s q"]")}function js(s,n,j,k){if(a[n]=="TDATE"){j="{\"$date\":";k="}"};return(q a[n]q":"j q s q k)}NR==1{for(n=1;n<=NF;++n)a[n]=$n;next}{s="{";for(n=1;n<=NF-2;++n)s=s js($n,n)",";p=p t s jx($(NF-1)","$NF,NF-1);t="},\n "}END{print "["p"}]"}' tst.csv
[{"ORGNUMBER":"131025","ORGPATH":"0015000000/0015013737/","ORGNAME":"在册不在岗人员","SUBNODE":"0","PNAME":"分公司内部退养人员","GSHORTNAME":"内部退养人员","TDATE":{"$date":"2015-11-02 00:00:36"},"SORGID":["00150000000","0015013737"]},
{"ORGNUMBER":"52106532","ORGPATH":"0350000000/0065513737/","ORGNAME":"工程技术一分公司","SUBNODE":"1","PNAME":"公司工程技术公司工程技术一分公司机关","GSHORTNAME":"机关","TDATE":{"$date":"2013-12-31 00:01:32"},"SORGID":["0350000000","0065513737"]}]

论坛徽章:
0
8 [报告]
发表于 2016-09-28 14:40 |只看该作者
moperyblue 发表于 2016-09-28 14:00
回复 5# hope1234567hope

谢谢,能帮我解释下s/([^,]*),([^\n]*)\n([^,]*),/\1":"\3@\2\n/ 解释下么?我好理解下!
想好好学习下sed 中匹配

论坛徽章:
28
15-16赛季CBA联赛之八一
日期:2016-02-22 19:10:4215-16赛季CBA联赛之深圳
日期:2016-12-01 10:34:0415-16赛季CBA联赛之新疆
日期:2016-12-07 10:24:2915-16赛季CBA联赛之同曦
日期:2016-12-15 12:06:43CU十四周年纪念徽章
日期:2016-12-18 13:03:4415-16赛季CBA联赛之吉林
日期:2017-01-03 15:52:2515-16赛季CBA联赛之辽宁
日期:2017-01-04 14:58:2415-16赛季CBA联赛之辽宁
日期:2017-01-15 09:42:512016科比退役纪念章
日期:2017-02-06 17:21:50黑曼巴
日期:2017-02-10 15:46:1215-16赛季CBA联赛之上海
日期:2017-03-18 10:14:5415-16赛季CBA联赛之青岛
日期:2017-03-18 22:00:44
9 [报告]
发表于 2016-09-28 14:48 |只看该作者
回复 8# hope1234567hope


1.先学正则 => 可通过百度等搜索引擎查找相关资料
2.info sed
3.http://bbs.chinaunix.net/thread-1762006-1-1.html
4.sedsed工具
...

论坛徽章:
307
程序设计版块每周发帖之星
日期:2016-04-08 00:41:33操作系统版块每日发帖之星
日期:2015-09-02 06:20:00每日论坛发贴之星
日期:2015-09-02 06:20:00程序设计版块每日发帖之星
日期:2015-09-04 06:20:00每日论坛发贴之星
日期:2015-09-04 06:20:00每周论坛发贴之星
日期:2015-09-06 22:22:00程序设计版块每日发帖之星
日期:2015-09-09 06:20:00程序设计版块每日发帖之星
日期:2015-09-19 06:20:00程序设计版块每日发帖之星
日期:2015-09-20 06:20:00每日论坛发贴之星
日期:2015-09-20 06:20:00程序设计版块每日发帖之星
日期:2015-09-22 06:20:00程序设计版块每日发帖之星
日期:2015-09-24 06:20:00
10 [报告]
发表于 2016-09-28 15:08 |只看该作者
既然列数固定, 直接格式化打印就可以了. 使用正则反而效率低下.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP