免费注册 查看新帖 |

Chinaunix

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

[文本处理] 文件匹配合并问题 有点难度 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-09-22 00:42 |只看该作者 |倒序浏览
本帖最后由 nakalzz 于 2012-09-22 17:28 编辑

各位高手今天工作中遇到一个处理文件的难题
还请多多指教

如下
a.txt
12,434,ok
23,434,ok
334,443,ng
32,215,ok
44,453,ok

b.txt
12,434,ok
334,443,ng
44,453,ng
55,232,ok

现在想把a.txt和b.txt合并为
c.txt
12,434,ok 12,434,ok
23,434,ok,xx,xx,xx
334,443,ng 334,443,ng
32,215,ok,xx,xx,xx
44,453,ok 44,453,ng
xx,xx,xx 55,232,ok

这里的匹配是以前两个field来决定的
比如说44,453,ok和44,453,ng也算平配成功
如果不匹配成功就默认为xx,xx,xx

还请多多指教

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
2 [报告]
发表于 2012-09-22 00:55 |只看该作者
回复 1# nakalzz


    c.txt
12,434,ok 12,434,ok
23,434,ok
334,443,ng 334,443,ng
32,215,ok 32,215,ok # 这个从哪来的?

论坛徽章:
0
3 [报告]
发表于 2012-09-22 08:11 |只看该作者
回复 2# yinyuemi


  谢谢确认 这里写错了
  因该是没有匹配
  问题修改了 还请多多指教

论坛徽章:
0
4 [报告]
发表于 2012-09-22 09:09 |只看该作者
回复 1# nakalzz

awk 'NR==FNR{a[$0]=$0;next}{print $0,a[$0]}' b.txt a.txt
   

论坛徽章:
0
5 [报告]
发表于 2012-09-22 18:30 |只看该作者
回复 4# kk5234


    你好 题目有些变化 还请多多指教

论坛徽章:
0
6 [报告]
发表于 2012-09-22 21:37 |只看该作者
回复 5# nakalzz

你的题目不会再变了吧

awk -F, 'ARGIND==1{a[$1$2]=$0}ARGIND==2{b[$1$2]=$0;if($1$2 in a)print $0,a[$1$2];else print $0,"xx,xx,xx,"}ARGIND==3{if(!($1$2 in b))print "xx,xx,xx",$0}' b.txt a.txt b.txt
12,434,ok 12,434,ok
23,434,ok xx,xx,xx,
334,443,ng 334,443,ng
32,215,ok xx,xx,xx,
44,453,ok 44,453,ng
xx,xx,xx 55,232,ok

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
7 [报告]
发表于 2012-09-23 00:40 |只看该作者
try:
  1. awk -F, 'NR==FNR{a[$1"_"$2]=$0;next}{k=$1"_"$2;if(k in a){ print a[k],$0;delete a[k]}else print "xx,xx,xx,"$0}END{for(i in a) print a[i]",xx,xx,xx"}' file1 file2
复制代码
  1. join -t, -a 1 -a 2 -o 0,1.2,0,2.2 -e xx <(sed 's/,/#/' file1|sort) <(sed 's/,/#/' file2|sort)|sed 's/#/,/g'|sed 's/[^,]\+,[^,]\+,xx/xx,xx,xx/g'
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2012-09-23 01:27 |只看该作者
回复 6# kk5234



    a[$1$2], this could be risky, since "12,345,ok" "123,45,ok" would have the same key as '12345'.

论坛徽章:
0
9 [报告]
发表于 2012-09-23 10:26 |只看该作者
强大的AWK.....努力中!!!

论坛徽章:
20
CU大牛徽章
日期:2013-03-13 15:29:072015亚冠之阿尔希拉尔
日期:2015-09-12 09:33:562015年亚冠纪念徽章
日期:2015-09-22 17:12:202015亚冠之本尤德科
日期:2015-10-29 16:18:18神斗士
日期:2015-11-23 13:37:23青铜圣斗士
日期:2015-12-07 10:14:28平安夜徽章
日期:2015-12-26 00:06:3015-16赛季CBA联赛之佛山
日期:2016-01-18 08:59:06shanzhi
日期:2016-06-17 17:59:3115-16赛季CBA联赛之同曦
日期:2016-11-03 14:43:552015七夕节徽章
日期:2015-08-21 11:06:17丑牛
日期:2014-12-30 16:06:17
10 [报告]
发表于 2012-09-23 10:34 |只看该作者
AWK  好强大
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP