免费注册 查看新帖 |

Chinaunix

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

awk左连接问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-18 16:51 |只看该作者 |倒序浏览
有两个文件1.txt和2.txt,
1.txt的数据如下所示:
  1. 2929292
  2. 8282828
  3. 7878787
  4. 6767676
  5. 4545454
复制代码
2.txt的数据显示如下:
  1. 2929292|11
  2. 8282828|22
  3. 7878787|33
  4. 6767676|44
复制代码
现在想根据1.txt的数据查询2.txt,最后显示的结果如下:
  1. 2929292|11
  2. 8282828|22
  3. 7878787|33
  4. 6767676|44
  5. 4545454|0
复制代码
也就是1.txt的数据会全部保留,如果1.txt的数据在2.txt不存在,则数据的值置为0,如:4545454|0
最后把结果文件输出到一个文件里!

求助大家献计献策!

论坛徽章:
0
2 [报告]
发表于 2011-08-18 17:02 |只看该作者
awk -F '|' 'NR==FNR{a[$1]=$2;next}{print $1"|"$1 in a?a[$1]:0}' 2.txt 1.txt >newfile

论坛徽章:
0
3 [报告]
发表于 2011-08-18 17:06 |只看该作者
如果不要显示0的话,join倒是很方便

论坛徽章:
0
4 [报告]
发表于 2011-08-18 17:08 |只看该作者
本帖最后由 sundful 于 2011-08-18 17:11 编辑

回复 3# icybay
哦,谢谢您,但是好像必须需要显示这个0,左连接嘛!

论坛徽章:
0
5 [报告]
发表于 2011-08-18 17:11 |只看该作者
本帖最后由 sundful 于 2011-08-18 17:16 编辑

回复 2# ywlscpl
正在测试,一会回复结果,谢谢您!~

输出的结果:
  1. 0
  2. 0
  3. 0
  4. 0
  5. 0
  6. 0
  7. 0
  8. 0
  9. 0
  10. 0
复制代码
好像还有些问题!

论坛徽章:
0
6 [报告]
发表于 2011-08-18 17:12 |只看该作者
回复 4# sundful

还真不太会,如果用Perl很好搞

论坛徽章:
0
7 [报告]
发表于 2011-08-18 17:22 |只看该作者
回复 1# sundful


不好意思,  没测试
你把$1 in a?a[$1]:0
用括号括起来
($1 in a?a[$1]:0)
  1. awk -F '|' 'NR==FNR{a[$1]=$2;next}{print $1"|"($1 in a?a[$1]:0)}' 2.txt 1.txt >newfile
复制代码

论坛徽章:
0
8 [报告]
发表于 2011-08-18 17:32 |只看该作者
回复 7# ywlscpl

求解释

论坛徽章:
0
9 [报告]
发表于 2011-08-18 17:39 |只看该作者
awk -F '|' 'NR==FNR{a[$1]=$2;next}{print $1"|"($1 in a?a[$1]:0)}' 2.txt 1.txt >newfile

1、awk 读入2.txt的时候满足条件NR==FNR,执行{a[$1]=$2;next},a[$1]=$2以$1为数组下标,$2为数组值建立数组,这样2.txt第一列和第二列建立了对应关系。next表示结束当前程式处理,读入下一行数据,也就是后面那部分awk语句不会执行了。
2、awk读入1.txt的时候,会执行{print $1"|"($1 in a?a[$1]:0)}
($1 in a?a[$1]:0)是问号表达式,$1 in a条件成立,表达式值为a[$1],否则值为0

论坛徽章:
0
10 [报告]
发表于 2011-08-18 17:44 |只看该作者
本帖最后由 sundful 于 2011-08-18 17:59 编辑

回复 7# ywlscpl

太感谢了,这个问题解决了,非常感谢,以后多看看你发的帖子得!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP