免费注册 查看新帖 |

Chinaunix

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

[文本处理] 请问一下如何用awk合并下面2个文件 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-01-26 05:44 |只看该作者 |倒序浏览
本帖最后由 fcbqs1989 于 2013-01-26 06:24 编辑

a.txt的内容:(相当于坐标x,y,z)
1 2 3
2 3 4
4 5 6
2 2 4

b.txt的内容:(相当于在(x,y,z)的值)
1 2 3 5
4 5 6 10
2 2 4 2
2 3 4 11

结果要是这个样子:
1 2 3 5
2 3 4 11
4 5 6 10
2 2 4 2

就是前3列按照a的顺序输出,最后一列按a匹配,找到在这个点的值。
试过 awk 'NR==FNR {a[$1]=$0} NR>FNR {if($1 in a) print a[$1]}' b.txt a.txt
貌似不行,因为需要比较3列都一样。

找了一些方法,都不成功。不知哪位大侠能帮下,谢谢啦~~~

论坛徽章:
0
2 [报告]
发表于 2013-01-26 05:47 |只看该作者
用过matlab,但是因为文件非常大,比如100w大小的文件。
循环的次数大约是100w*50w次,相当于几百亿次了,速度很慢。

论坛徽章:
3
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:51:162015年亚洲杯之阿曼
日期:2015-04-07 20:00:59
3 [报告]
发表于 2013-01-26 08:59 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
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
4 [报告]
发表于 2013-01-26 09:32 |只看该作者
回复 1# fcbqs1989


    a.txt 中的行是唯一的吗?

论坛徽章:
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
5 [报告]
发表于 2013-01-26 09:45 |只看该作者
  1. awk 'NR==FNR {a[$1,$2,$3]=$4;next}{i=$1 SUBSEP $2 SUBSEP $3;if(i in a) print $0,a[i]}' b.txt a.txt
复制代码

论坛徽章:
0
6 [报告]
发表于 2013-01-26 10:37 |只看该作者
回复 4# blackold




是唯一行,应该是的。一个点(x,y,x)代表不同地方。

我试试你的code哈~~~   

论坛徽章:
0
7 [报告]
发表于 2013-01-26 10:40 |只看该作者
回复 3# zooyo


   呵呵,就是万啊~~

我用matlab弄的,2个for loop。

论坛徽章:
0
8 [报告]
发表于 2013-01-26 10:50 |只看该作者
回复 5# blackold


   
最后再问您一下,

当文件里面的前3列都是整数的时候,这个code没什么问题。


但是,因为一些误差的问题,可能会有小数点的差别,请问有什么更好的方法没?

比如a里面的一个点是:
1.123 2.2 2.3
这里(x,y,z)

对应的b里面一个点
1.12 2.2 2.3 3.5
这里(x,y,z,值)

因为一些误差的原因第一列其实只差0.003,在同一个点上面。怎么把它也考虑进来呢?

论坛徽章:
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
9 [报告]
发表于 2013-01-26 10:53 |只看该作者
回复 8# fcbqs1989


    这要看怎么样才算同一个点了。

论坛徽章:
0
10 [报告]
发表于 2013-01-26 10:59 |只看该作者
回复 9# blackold


  

x,y,z 的坐标加减0.5之内都算。

|x|<0.5
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP