免费注册 查看新帖 |

Chinaunix

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

[文本处理] 两个文本做join操作 [复制链接]

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

请教一个文本处理问题
aa.txt
10|baidu.com|26377|1391|1555
10|sina.com|10487|591|637
10|baidu.com|2165|316|335
10|qq.com|3217|102|109

bb.txt
baidu.com|百度
sina.com|新浪
qq.com|腾讯

最后想得到的结果
10|baidu.com|26377|1391|1555|百度
10|sina.com|10487|591|637|新浪
10|baidu.com|2165|316|335|百度
10|qq.com|3217|102|109|腾讯

就相当于对做了个select join操作,用shell 怎么实现

论坛徽章:
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 [报告]
发表于 2015-01-23 12:52 |只看该作者
本帖最后由 jason680 于 2015-01-23 14:37 编辑

回复 1# quanliming

$ awk 'BEGIN{FS=OFS="|"}FNR==NR{a[$1]=$2;next}{print $0,a[$2]}' bb.txt aa.txt
10|baidu.com|26377|1391|1555|百度
10|sina.com|10487|591|637|新浪
10|baidu.com|2165|316|335|百度
10|qq.com|3217|102|109|腾讯

   

论坛徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序设计版块每日发帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序设计版块每日发帖之星
日期:2016-06-12 06:20:002016科比退役纪念章
日期:2016-05-31 15:47:20CU十四周年纪念徽章
日期:2016-05-27 12:24:562015年亚洲杯之阿曼
日期:2015-05-03 21:01:352015年辞旧岁徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序设计版块每日发帖之星
日期:2016-08-11 06:20:00
3 [报告]
发表于 2015-01-23 12:56 |只看该作者
回复 1# quanliming
  1. @ubuntu:~/bash-script$ join -t '|' -a1 -1 2 -2 1 -o 1.1 1.2 1.3 1.4 1.5 2.2 <(sort A.txt) <(sort B.txt)  
  2. 10|baidu.com|2165|316|335|百度
  3. 10|baidu.com|26377|1391|1555|百度
  4. 10|qq.com|3217|102|109|腾讯
  5. 10|sina.com|10487|591|637|新浪
复制代码

论坛徽章:
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
4 [报告]
发表于 2015-01-23 13:34 |只看该作者
本帖最后由 jcdiy0601 于 2015-01-23 13:38 编辑
  1. #!/usr/bin/env python
  2. #-*- coding:utf-8 -*-
  3. file1 = open('aa.txt','r')
  4. file2 = open('bb.txt','r')
  5. list1 = [i.strip('\n') for i in file1.readlines()]
  6. list2 = [i.strip('\n') for i in file2.readlines()]
  7. list = [i.split('|') for i in list2]
  8. for i in list1:
  9.     i = i.split('|')
  10.     for j in list:
  11.         if i[1] == j[0]:
  12.             print "%s|%s|%s|%s|%s|%s" % (i[0],i[1],i[2],i[3],i[4],j[1])
复制代码

论坛徽章:
9
2015亚冠之大阪钢巴
日期:2015-06-04 11:47:30丑牛
日期:2015-01-22 15:49:26巳蛇
日期:2015-01-22 10:11:18巨蟹座
日期:2014-11-20 10:55:03天蝎座
日期:2014-11-16 22:10:26处女座
日期:2014-11-16 11:01:10申猴
日期:2014-09-19 11:12:37双鱼座
日期:2014-07-25 10:09:54程序设计版块每日发帖之星
日期:2015-08-24 06:20:00
5 [报告]
发表于 2015-01-23 13:55 |只看该作者
回复 3# liion631818


    你为何这么叼...

论坛徽章:
0
6 [报告]
发表于 2015-01-23 14:32 |只看该作者
awk -F"|" 'BEGIN{OFS="|"}NR==FNR{a[$1]=$2}NR>FNR{print $0,a[$2]}'  bb.txt aa.txt

论坛徽章:
2
白羊座
日期:2014-06-17 11:04:28午马
日期:2014-12-29 15:37:13
7 [报告]
发表于 2015-01-23 14:43 |只看该作者
  1. with open(r"D:\test\b.txt") as f1:
  2.         d = {}
  3.         for i in f1:
  4.             l = i.strip().split('|')
  5.             d[l[0]] = l[1]
  6.         with open(r"D:\test\a.txt") as f2:
  7.             for i in f2:
  8.                 l = i.strip().split('|')
  9.                 if l[1] in d:
  10.                     print i.strip()+'|'+d[l[1]]
复制代码

论坛徽章:
0
8 [报告]
发表于 2015-01-23 16:55 |只看该作者
  1. awk -F'|'  'NR==FNR{a[$1]=$2;next}{print $0,FS,a[$2]}' bb.txt aa.txt
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP