awk 编程

1 awk处理流程
  awk 按顺序读取文本文件内容,默认以空格区分域。从第一行一直读取到文本的最后一行
  可以通过 F 标签重新指定分割域标示。
 
  //将指定文件按照行读取 并且以 : 分割域,分别打印出 正行以及第一个、第二个、第三个域的值
 
$ awk -F : '{print $0,$1,$2,$3}' filename 

 
  //不同的方法实现上面同样的功能
  $ awk 'BEGIN{FS=":"}{print $0,$1,$2,$3}' filename
  //这里的BEGIN是指在操作具体函数操作之前的指令,通常配合END使用,也可以单独使用
 
2 awk 查看字符串是否包含某子串
 
$ awk '{if($0 ~"root"){print "it matched !"} else{print "nothing..."}}'

 
  ~ 是包含子串的正则匹配,也可以使用 !~ 不包含,同理,这里还可以使用 >,>=,<,<=,==,!= 进行计算比较。
 
  包含子串还可以使用 '//' 标签。例如
 
$ awk '/root/' /etc/passwd

  上面的指令 会打印出包含root子串的一整行信息
 
  同理,还可以通过 '//' 标签截取文本中的一整段信息
 
$ awk '/this is begin str/,/this is end str/' filename 

  上面的指令会打印出 文本文件从begin开始到end结束的文本信息
 
  awk查询特定字符开始的字符串
 
$ awk '$0 ~/^Akl.*/{print $0}' filename 

  上面指令完成在指定文件中查询以Akl开头的数据行
 
3 awk 函数的处理
  比较通用的处理指令可以被写在 特定的文件中,在适当的地方进行调用可以增加代码的复用性
  例如:
  定义一个函数体 在文件 fuc.awk ,其内容被编辑为 {print $1,$2 * $3}
  调用此函数 
$ awk -f fuc.awk filename 

 
4 awk 使用循环
  awk中可以使用for 循环,也可以使用 while循环
  for 实例:
 
$ echo "" | awk '{for(i=1;i<5;i++){print i}}'

  上面指令将会输出 1,2,3,4
 
  while实例:
 
$ echo "" | awk 'BEGIN{uk=10;print "this is begin line"}{while(uk > 0){print uk;uk--}}END{print "this is end line"}'

 
5 awk NF  NR 的使用
  NF : Number of Field,返回的是一个数值,表示指定域的个数
  $NF : 返回的则是域本身的值
 
  NR: Number of Records,返回的是一个数值,表示已经读取了多少行数据。
 

 
 
 

猜你喜欢

转载自annan211.iteye.com/blog/2356171