免费注册 查看新帖 |

Chinaunix

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

awk 如何处理两个文件,实现类似数据库表连接的操作 [复制链接]

论坛徽章:
12
辰龙
日期:2013-10-23 11:06:312015年迎新春徽章
日期:2015-03-04 09:50:28拜羊年徽章
日期:2015-03-03 16:15:43戌狗
日期:2014-12-22 14:49:17申猴
日期:2014-05-14 17:25:17狮子座
日期:2014-04-26 18:50:20双子座
日期:2014-04-04 12:32:31巨蟹座
日期:2014-03-13 00:04:36技术图书徽章
日期:2014-03-12 17:50:42白羊座
日期:2014-02-28 23:46:54丑牛
日期:2013-11-15 05:36:11CU十四周年纪念徽章
日期:2016-01-18 04:54:01
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-23 18:16 |只看该作者 |倒序浏览
本帖最后由 kunson 于 2010-06-23 18:19 编辑
  1. $ cat  file1
  2. 23  中西
  3. 98  红
  4. 34  西瓜
  5. 53  巴巴
复制代码
  1. $ cat  file2
  2. 巴巴    c
  3. 红      b
  4. 西瓜    d
  5. 中西    f

复制代码
得到

  1. 23  f
  2. 98  b
  3. 34  d
  4. 53  c
复制代码
另外,awk和sed,分别怎么发音?

诶达布遛剋?

色得?

论坛徽章:
0
2 [报告]
发表于 2010-06-23 18:26 |只看该作者
  1. awk 'NR==FNR{a[$2]=$1}NR!=FNR{$1=a[$1];print}' file1 file2
复制代码
//注意关联列不能对应不同的值。

论坛徽章:
0
3 [报告]
发表于 2010-06-23 18:36 |只看该作者
  1. awk 'NR==FNR{a[$1]=$2}NR>FNR{print $1,a[$2]}' file2 file1
复制代码

论坛徽章:
0
4 [报告]
发表于 2010-06-23 19:12 |只看该作者
学习,怎么发音我也不知道,都是自学的,从来没听别人说过怎么读

论坛徽章:
0
5 [报告]
发表于 2010-06-23 19:18 |只看该作者
我读:
awk  [ ɔ:k ]   
sed   [ sed ]

论坛徽章:
0
6 [报告]
发表于 2010-06-24 00:34 |只看该作者
我读:
awk  [ ɔ:k ]   
sed   [ sed ]
ywlscpl 发表于 2010-06-23 19:18



    俺也是。。。

论坛徽章:
0
7 [报告]
发表于 2010-06-24 09:44 |只看该作者
请教一下2楼、3楼
awk 'XXXX' file1 file2这样的语句是如何处理的?
一直不太明白

论坛徽章:
1
水瓶座
日期:2013-11-04 13:16:13
8 [报告]
发表于 2010-06-24 09:45 |只看该作者
回复 6# lkk2003rty


    {:3_189:}

论坛徽章:
0
9 [报告]
发表于 2010-06-24 09:48 |只看该作者
请教一下2楼、3楼
awk 'XXXX' file1 file2这样的语句是如何处理的?
一直不太明白
lzolder 发表于 2010-06-24 09:44


看你XXXX是怎么写的了。。。。。比如awk '1' file1 file2 就是先处理file1再处理file2

论坛徽章:
0
10 [报告]
发表于 2010-06-24 10:17 |只看该作者
g了一下,明白是awk是顺序处理file1、file2、file3...
所以新手来解释下高手ywlscpl代码
  1. awk 'NR==FNR{a[$1]=$2}NR>FNR{print $1,a[$2]}' file2 file1
复制代码
1、NR=已处理的记录数;FNR= 当前文件处理的记录数,明确了这个,那么处理第一个文件时,NR是等于FNR的,处理第二个文件时,NR>FNR
2、所以高手ywlscpl的代码处理第一个文件file2时,只是数组赋值,因为此时NR没有>FNR,即为:
a[巴巴]=c
a[红]=b
a[西瓜]=d
a[中西]=f
3、继续处理第二个文件file1,这时满足NR>FNR的判断条件,所以打印print $1,a[$2],即为:
print 23,a[中西],a[中西]=d,所以输出是23,f
print 98,a[红],a[红]=b,所以输出是98,b
....................................................34,d
.....................................................53,c

总算搞明白了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP