AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
为什么叫 AWK? 这是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的姓氏的首字符。
awk [选项参数] 'script' var=value file(s) awk [选项参数] -f scriptfile var=value file(s)
-F fs 或 --field-separator fs 指定输入文件折分隔符,fs 是一个字符串或者是一个正则表达式,如:-F:。
-v var=value 或 --asign var=value 将值赋值给一个用户定义的变量。
-f scripfile 或 --file scriptfile 从脚本文件中读取 awk 命令。
-mf nnn and -mr nnn 对 nnn 值设置内在限制,-mf 选项限制分配给 nnn 的最大块数目;-mr 选项限制记录的最大数目。这两个功能是 Bell 实验室版 awk 的扩展功能,在标准 awk 中不适用。
-W compact 或 --compat, -W traditional 或 --traditional 在兼容模式下运行 awk。所以 gawk 的行为和标准的 awk 完全一样,所有的 awk 扩展都被忽略。
-W copyleft 或 --copyleft, -W copyright 或 --copyright 打印简短的版权信息。
-W help 或 --help, -W usage 或 --usage 打印全部 awk 选项和每个选项的简短说明。
-W lint 或 --lint 打印不能向传统 unix 平台移植的结构的警告。
-W lint-old 或 --lint-old 打印关于不能向传统unix平台移植的结构的警告。
-W posix 打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符**和**=不能代替^和^=;fflush无效。
-W re-interval 或 --re-inerval 允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。
-W source program-text 或 --source program-text 使用 program-text 作为源代码,可与-f命令混用。
-W version 或 --version 打印 bug 报告信息的版本。
(1)使用 “awk '{[pattern] action}' {filenames}” 格式解析 log.txt 文件。下面将使用 awk 解析 log.txt,输出文件中的 NAME 列,命令如下:
[hxstrive@localhost ~]$ cat log.txt NAME AGE Tom 20 Helen 30 Bill 27 [hxstrive@localhost ~]$ awk '{print $1}' log.txt NAME Tom Helen Bill
(2)使用 awk 格式化输出 log.txt 文件中的内容,命令如下:
[hxstrive@localhost ~]$ awk '{printf "%20s %5s\n", $1, $2}' log.txt NAME AGE Tom 20 Helen 30 Bill 27
(3)使用 “awk -F” 格式解析 log.txt 文件。其中,-F 相当于内置变量 FS, 用来指定分割字符。下面使用空格作为分隔符来分割字符串,命令如下:
[hxstrive@localhost ~]$ awk -F ' ' '{print $1,$2}' log.txt NAME AGE Tom 20 Helen 30 Bill 27
(4)使用 awk 内建 FS 变量指定使用空格作为分隔符,命令如下:
[hxstrive@localhost ~]$ awk 'BEGIN{FS=" "} {print $1,$2}' log.txt NAME AGE Tom 20 Helen 30 Bill 27
(5)使用多个分隔符,先使用空格进行分割,然后对分割结果再使用 “,” 进行分割,命令如下:
[hxstrive@localhost ~]$ cat log.txt NAME,SEX AGE Tom,MALE 20 Helen,FEMALE 30 Bill,MALE 27 [hxstrive@localhost ~]$ awk -F '[ ,]' '{printf "%10s | %15s\n",$1,$2}' log.txt NAME | SEX Tom | MALE Helen | FEMALE Bill | MALE
(6)使用 -v 定义一个变量 a,且赋值为 1,然后将 a 变量和年龄相加,命令如下:
[hxstrive@localhost ~]$ cat log.txt NAME,SEX AGE Tom,MALE 20 Helen,FEMALE 30 Bill,MALE 27 [hxstrive@localhost ~]$ awk -va=1 '{print $1,$2,$2+a}' log.txt NAME,SEX AGE 1 Tom,MALE 20 21 Helen,FEMALE 30 31 Bill,MALE 27 28
(7)使用 -v 定义多个变量,分别为变量 a 和 b,命令如下:
[hxstrive@localhost ~]$ awk -va=1 -vb=' - ' '{print $1,b,$2,b,$2+a}' log.txt NAME,SEX - AGE - 1 Tom,MALE - 20 - 21 Helen,FEMALE - 30 - 31 Bill,MALE - 27 - 28
(8)使用 “awk -f {awk脚本} {文件名}” 格式执行外部 awk 脚本,例如:
a、cal.awk 脚本内容
[hxstrive@localhost ~]$ cat cal.awk {print $1,$2}
b、使用 awk 执行 awk 脚本
[hxstrive@localhost ~]$ awk -f cal.awk log.txt NAME,SEX AGE Tom,MALE 20 Helen,FEMALE 30 Bill,MALE 27
关于更多的AWK教程,请学习“AWK教程”。
更多关于命令详细参考手册,请使用 man 命令或者 --help 参数获取帮助信息