Join关联结果不正确问题 By Katana
Join命令是一个非常高效的命令,大家都用的非常多,但是有时候join的结果会有些问题,很多同事问过Join命令为什么有时候不能正确关联出数据,经过研究发现如下: 大家都知道join之前是需要sort的,先看一个join实例: 文件1:1.txt 1.txt 1002547 14 1002549 15 10025492 15 10025472 14 Sort之后的结果: sort 1.txt 1002547 14 10025472 14 1002549 15 10025492 15 文件2:2.txt 1002547 14 10025471 01 10025476 01 10025473 01 1002549 135 10025498 135 10025492 115 Sort之后的结果: sort 2.txt 10025471 01 1002547 14 10025473 01 10025476 01 1002549 135 10025492 115 10025498 135 Join结果:
1002549 15 135 10025492 15 115 而实际上应该join出3个: 1002547 1002549 10025492
大家如果对自己的结果一一去做仔细核查的话,其实会发现join少了不少数据。 很多人也因为join经常莫名其妙的问题而放弃使用join改用其他更费事的办法。
至于为什么sort会把10025471放到1002547前面?这完全是因为字符集的原因,因为不同的字符集有不同的字符大小排序和比较方式(同一个字符集字符比较方式也有多种): env|grep LANG LANG=zh_CN 如果在执行前把字符集设置为C export LANG=C(如无效则需要设置更高的字符环境变量export LC_ALL=C) sort 1.txt 1002547 14 10025472 14 1002549 15 10025492 15 sort 2.txt 1002547 14 10025471 01 10025473 01 10025476 01 1002549 135 10025492 115 10025498 135 join出来的结果: 1002547 14 14 1002549 15 135 10025492 15 115
Sort是按照当前字符集顺序来排序,而join则需要按照标准顺序排序来连接。
所以大家以后join来处理文件的时候,一定要指定字符集再使用sort export LANG=C |
本文原创自无线技术运营空间: http://wireless.qzone.qq.com 及 http://blog.youkuaiyun.com/wireless_tech (专注无线技术运营——无线技术(操作系统/数据库/WEB前端/负载均衡/系统容灾/系统安全/短信接入/WAP接入/3G等)、无线业务运营、无线开放平台、统计分析(用户行为分析/数据挖掘)、CP合作,联系我们:1780551083@qq.com)