Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2986768
  • 博文数量: 272
  • 博客积分: 5544
  • 博客等级: 大校
  • 技术积分: 5496
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 00:48
个人简介

  每个人都要有一个骨灰级的爱好,不为金钱,而纯粹是为了在这个领域享受追寻真理的快乐。

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-05-14 15:27:17

cat file1
a b
c d
aa bb cc dd

cat file2
1 2 3 4 5
6 7
11 22 33 44 55 66 77
111 222 333 444 555 666 777

合并为:
6 7 c d
6 7 cc dd
66 77 c d
66 77 cc dd
666 777 c d
666 777 cc dd
就是第一个文件的最后2列和第二个文件的最后两列循环放在一行。

 

  1. awk 'NR==FNR{a[FNR]=$(NF-1) FS $NF;l=FNR;next}{for(i=1;i<=l;i++)print $(NF-1),$NF,a[i]}
[解析]
  从合并后的文本可以看出是把file1的最后2列循环合并到file2的最后两列中,NR==FNR即为第一个文本文件判断也就是后面跟的参数file1,这时候以FNR数组下标把倒数第2个域FS(域分割符,默认空格)最后一个域赋值给数组a,得到下面的内容:
a[1]=c d
a[2]=cc dd
因为file1只有两行,这时候FNR的值为2,赋给变量l,next的作用,类似C语言中的continue,不再执行后面的action,当awk读到file2时,这个时候FNR会初始化,不再等于NR,那么跳过这个pattern{action},执行后面的for循环,打印file2的倒数第2个域 FS 最后一个域 FS a[1],这样循环打印下去得到合并的内容。
阅读(2761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~