Chinaunix首页 | 论坛 | 博客
  • 博客访问: 491400
  • 博文数量: 71
  • 博客积分: 1332
  • 博客等级: 少尉
  • 技术积分: 772
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-10 16:25
个人简介

文章分类

全部博文(71)

文章存档

2013年(19)

2012年(9)

2011年(43)

分类: Python/Ruby

2011-03-31 14:49:16

续   awk 实用操作记录 精妙用法 No.1

原始帖子地址


1.3、将文件file3中包含文件file4记录的记录打印出来

原始文件

  1. # cat file4
  2. 05766798607
  3. 05766798608
  4. 05766798609

  5. # cat file3
  6. 10/05766798607,11/20050325191329,29/0.1,14/05766798607
  7. 10/05767158557,11/20050325191329,29/0.08,14/05767158557
预期结果

  1. 10/05766798607,11/20050325191329,29/0.1,14/05766798607
命令

  1. # grep -f file4 file3
  1. # awk -F'[/,]' 'ARGIND==1{a[$0]}ARGIND>1{if ($2 in a) print $0}' file4 file3
  1. # awk -F'[/,]' 'NR==FNR{a[$0]}NR>FNR{if ($2 in a) print $0}' file4 file3
比较一下两个awk的命令,可以发现,NR和FNR相互配合可以实现ARGIND的功能。
命令虽然和原文的有些出入,但是结果都是一样的。想到了就要实验一下,以验证自己的理解。
另外上面grep也可以实现同样的功能,但是到数据特别多的时候,awk会比grep快很多。

这里还是要附一下awk内部变量的汇总,因为每敲一次就会加深一下印象。

2、内部变量汇总:

  1. NR:已经读取的记录条数
  2. FNR:正在读取的文件中已经读取的记录条数
  3. ARGIND:文件所在参数列表的位置
  4. ARGC:命令行参数的个数
  5. ARGV:命令行参数数组
  6. FS:用于指定记录域分隔符
  7. OFS:用于指定输出记录域分割符
  8. NF:记录域的个数
  9. ORS:记录的分隔符
阅读(1430) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~