awk提供了一种编程语言,在编程语言内部,可以:

  • 定义要保存数据的变量。
  • 使用算术和字符串操作符对数据进行运算。
  • 使用结构化编程概念,例如if-then语句和循环,将逻辑天价到数据处理过程。
  • 通过从数据文件内抽取数据元素以及按照其他顺序或格式对它们重定位,生成带格式的报告。
  • awk命令格式:awk options program file

awk选项

选项 描述
-F fs 指定描绘一行中数据字段的文件分隔符
-f file 指定读取程序的文件名
-v var=value 定义awk程序中使用的变量和默认值
-mf N 指定数据文件中要处理的字段的最大数目
-mr N 指定数据文件中最大记录大小
-W keyword 指定awk的兼容模式或警告级别

awk文本处理方式

  • awk程序脚本由左大括号和右大括号定义。脚本命令必须放在两个大括号之间,由于awk命令假定脚本是单文本字符串,所以必须将脚本包括在单引号内。e.g:aek '{print "Hello John!"}'
  • awk使用的数据字段变量:
  1. $0表示正行文本
  2. $1表示文本行中的第一个数据字段
  3. $2表示文本行中的第二个数据字段
  4. $n表示文本行中的第n个数据字段
  5. e.g:awk -F: '{print $1}' /etc/passwd
  • 在程序脚本中使用多个命令:要在命令行指定的程序脚本中使用多个命令,只需在各命令行之间加分号:echo "My name is Rich" | awk '{$4="Dave";print $0}'(会替换原文本)
  • awk编辑器允许将程序保存在文件中并在命令行引用它们。e.g:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
实例1
cat { print $5 "'s userid is " $1}>script2
awk -F: -f script2 /etc/passwd
实例2
cat>script3
{
text="'s userid is " #定义一个变量存储print命令使用的文本字符串。
print $5 text $1
}(EOF)
awk -F: -f script3  /etc/passwd | more
  • 使用BEGIN关键字在处理数据之前运行脚本:awk '{print "GoodbyeWorld"} BEGIN {print "HelloWorld"}'#先显示HelloWorld
  • 使END关键字在处理数据之后运行脚本:awk '{print "GoodbyeWorld"} END {print "HelloWorld"}'#先显示GoodbyeWorld