awk

Table of Contents

1 工作方式

awk 脚本结构: awk 'BEGIN{ statements } statements2 END{ statements }'

  1. 执行 begin 中语句块
  2. 从文件或 stdin 中读入一行,然后执行 statements2 ,重复这个过程,直到文件全部被读取完毕
  3. 执行 end 语句块

常用特殊常量:

  • NR: 表示记录数量,在执行过程中对应当前行号
  • NF: 表示字段数量,在执行过程总对应当前行的字段数
  • $0: 这个变量包含执行过程中当前行的文本内容
  • $1: 第一个字段的文本内容
  • $2: 第二个字段的文本内容

打印指定文本区域:

确定行号: seq 100 | awk 'NR=4, NR=6 {print}'

确定文本, 打印处于 start_patternend_pattern 之间的文本: awk \'\/start_pattern\/, \/end_pattern\/ filename

示例:

seq 100 | awk '/13/,/15/'
cat /etc/passwd| awk '/mai.*mail/,/news.*news/'

2 常用内建函数

  • index(string, search_string): 返回 searchstring 在 string 中出现的位置
  • sub(regex, replacement_str, string): 将正则匹配到的第一处内容替换为 replacement_str
  • match(regex, string): 检查正则表达式是否能够匹配字符串
  • length(string): 返回字符串长度 echo | awk '{"grep root /etc/passwd" | getline cmdout; print length(cmdout) }'
  • printf 对输出进行格式化: seq 10 | awk '{printf "->%4s\n", $1}'

Date: 2017-12-04 11:37:43

Author: JerryZhang