免费注册 查看新帖 |

Chinaunix

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

[文本处理] [已解决]awk处理csv文件合并问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2017-01-03 21:13 |只看该作者 |倒序浏览
本帖最后由 abcfy2 于 2017-01-03 21:50 编辑

手头有三个csv文件
file1.csv:
  1. id,ssn
  2. 1,aaaa
  3. 2,bbbb
  4. 3,cccc
  5. 4,
复制代码


file2.csv
  1. timestamp
  2. 1111111
  3. 222222

  4. 444444
复制代码


file3.csv
  1. ssn,info
  2. bbbb,infob
  3. cccc,infoc
  4. aaaa,infoa
复制代码


要求:
1. 将file2.csv的列全部插入file1.csv的第二列,得到一个file1+2.csv文件file1+2.csv
  1. id,timestamp,ssn
  2. 1,11111,aaaa
  3. 2,22222,bbbb
  4. 3,,cccc
  5. 4,4444,
复制代码



2. 得到的结果再和file3.csv按照ssn进行LEFT JOIN操作

得到最终的结果:
  1. id,timestamp,ssn,info
  2. 1,111111,aaaa,infoa
  3. 2,222222,bbbb,infob
  4. 3,,cccc,infoc
  5. 4,4444444,,
复制代码

整个过程的SQL描述类似于:
  1. SELECT file1.id, file2.timestamp, file1.ssn, file3.info FROM file1.csv,file2.csv LEFT JOIN file3.csv ON file1.ssn = file3.ssn;
复制代码



论坛徽章:
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
2 [报告]
发表于 2017-01-03 21:33 |只看该作者
本帖最后由 moperyblue 于 2017-01-03 21:41 编辑
  1. awk -F, 'NR==FNR{a[$1]=$2;next}{$4=a[$3]}1' OFS=, file3.csv <(paste file1.csv file2.csv|sed -r 's/(,.*)\t(.*)/,\2\1/')
复制代码

论坛徽章:
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
3 [报告]
发表于 2017-01-03 21:40 |只看该作者
文件1和文件2的行数一样?

论坛徽章:
0
4 [报告]
发表于 2017-01-03 21:42 |只看该作者
回复 3# moperyblue

对,是一样的

论坛徽章:
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
5 [报告]
发表于 2017-01-03 21:43 |只看该作者
回复 4# abcfy2


那先试试效果

论坛徽章:
0
6 [报告]
发表于 2017-01-03 21:43 |只看该作者
第一个问题我在http://stackoverflow.com/questions/1602035/how-to-print-third-column-to-last-column 找到了答案

awk -F, '{getline f1 < "file2.csv"; print $1,f1,substr($0, index($0,$2))}' OFS=, file1.csv

第二个问题应该可以用join解决

论坛徽章:
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
7 [报告]
发表于 2017-01-03 21:44 |只看该作者
本帖最后由 moperyblue 于 2017-01-03 21:53 编辑

回复 6# abcfy2


对 可以用join 不过要先排序再join

论坛徽章:
6
羊年新春福章
日期:2015-03-03 17:16:28双子座
日期:2015-03-03 17:16:56巳蛇
日期:2015-03-03 17:17:2415-16赛季CBA联赛之福建
日期:2016-03-11 09:05:00黑曼巴
日期:2016-07-07 16:58:1215-16赛季CBA联赛之吉林
日期:2016-11-14 09:23:07
8 [报告]
发表于 2017-01-04 09:58 |只看该作者
  1. awk 'BEGIN{FS=OFS=","}{a=$1;c=$2;getline<"2"}{b=$1;print a,b,c}' 1 > 1+2

  2. awk 'BEGIN{FS=OFS=","}NR==FNR{a[$1]=$2;next}NR>FNR{if(a[$3]){print $0,a[$3]}else{print $0,""}}' 3 1+2
复制代码

论坛徽章:
0
9 [报告]
发表于 2017-01-09 16:22 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
10 [报告]
发表于 2017-01-09 17:05 |只看该作者
回复 4# abcfy2

6666666666666
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP