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

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

文章分类

全部博文(272)

文章存档

2015年(2)

2014年(5)

2013年(25)

2012年(58)

2011年(182)

分类: LINUX

2011-07-04 09:58:15

文件a:
2 3 5
3 4 8

文件b:
2 2 2 2
3 3 3 3
4 4 4 5
6 6 7 8
9 9 8 6
3 4 3 4
9 9 8 6
3 4 3 4
 
从文件a中读出对应的行号,然后打印出文件b中的内容,得到的结果如下:
3 3 3 3 4 4 4 5 9 9 8 6
4 4 4 5 6 6 7 8 3 4 3 4
 
  1. gawk '{a[NR]=$0}NR>FNR{for(i=1;i<NF;i++)printf a[$i] FS;print a[$NF]}' b a
  2. 3 3 3 3 4 4 4 5 9 9 8 6
  3. 4 4 4 5 6 6 7 8 3 4 3 4

[解析]

  这是yinyuemi大师的命令,非常巧妙,不光是思路上,而且达到短小精炼的目的。先把文件b按照NR递增作为下标读进数组a中,然后再第2部分再设置pattern条件目的是省略那个next,真是动了心思啊,而且在for表达式中,并非是常规写的 i<=NF ,而是 i

  1. awk '{a[NR]=$0}NR>FNR{for(i=1;i<=NF;i++)printf a[$i] FS;printf RS}' b a
阅读(6106) | 评论(1) | 转发(1) |
给主人留下些什么吧!~~

yestreenstars2013-01-08 11:18:35

直接这样写感觉更整洁一些:
awk 'NR==FNR{a[NR]=$0;next}{for(i=1;i<=NF;i++)$i=a[$i]}1' b a