1、命令简介
awk用于在linux/unix下对文本和数据进行处理。而且它支持用户自定义函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。
2、命令用法
awk 'Program' input-file1 input-file2 ... awk -f PROGRAM-FILE input-file1 input-file2 ...
3、命令描述
awk命令在文件中搜索包含模式的文本。当一行或文本匹配时,awk对该行/文本执行特定的操作。Program语句告诉awk该执行什么操作;程序语句由一系列“规则”组成,其中每个规则指定要搜索的模式,以及在找到特定模式时要执行的操作。用斜杠(/)括起来的正则表达式是一个awk模式,用于匹配其文本属于该集合的每个输入记录。
4、命令选项
标签 | 描述 |
-F FS --field-separator FS | 使用FS作为输入字段分隔符('FS'预定义变量的值)。 |
-f PROGRAM-FILE --file PROGRAM-FILE | 从文件PROGRAM-FILE中读取awk程序源, 而不是从第一个命令行参数中读取。 |
-mf NNN -mr NNN | 'f'标记设置字段的最大数量, 'r'标记设置记录的最大大小。 这些选项会被'gawk'忽略, 因为'gawk'没有预定义的限制; 它们只是为了与贝尔实验室的Unix awk研究版本兼容。 |
-v VAR=VAL --assign VAR=VAL | 在程序执行开始之前给变量VAR赋值VAL。 |
-W traditional -W compat --traditional --compat | 使用兼容性模式, 在这个模式下'gawk'扩展是关闭的。 |
-W lint --lint | 对可问题的或不可移植的awk构造给出警告。 |
-W lint-old --lint-old | 对于awk的原始版本7 Unix版本中 不可用的构造发出警告。 |
-W posix --posix | 使用POSIX兼容模式, 在这种模式下关闭"gawk"扩展, 并应用其他限制。 |
-W re-interval --re-interval | 允许在regexp中使用间隔表达式。 |
-W source=PROGRAM-TEXT --source PROGRAM-TEXT | 使用PROGRAM-TEXT作为awk程序源代码。 这个选项允许混合命令行源代码 和来自文件的源代码, 对于混合命令行程序和库函数特别有用。 |
-- | 标记选项结束。 这对于允许awk程序本身的进一步 参数以'-'开头非常有用。 这主要是为了与POSIX参数解析约定保持一致。 |
'Program' | patterns 和 actions |
Input-File | 如果没有指定Input-File , 则awk将程序应用于“standard input”, (一些其他命令或终端的管道输出。 键入的输入将一直持续到 文件结束(键入'Control-d') |
5、使用示例
1)执行ls -l命令的结果中每一行输出中返回第二项($2)
$ ls -l | awk '{print $1}' total drwx------+ drwx------+ drwx------+ drwx------@ drwx------ drwx------+ drwx------+ drwxr-xr-x+ drwxr-xr-x drwxr-xr-x drwx------ drwxr-xr-x -rw-r--r-- -rw-r--r--
2)打印ls -l每一行的第二和第三个字段:
$ ls -l | awk '{ print $2,$3 }'
16
3 levizhong
5 levizhong
12 levizhong
85 levizhong
3 levizhong
4 levizhong
4 levizhong
4 levizhong
3 levizhong
3)以特定格式输出passwd字符
$ awk -F: '{printf "%-15s->%10s ->%20s\n",$1,$(NF-3),$NF}' /etc/passwd|head -2
4)计算文件中的行数
$ awk 'END { print NR }' demo.txt
3
5)打印输出从0到100(包括100在内)的七个随机数
$ awk 'BEGIN { for (i = 1; i <= 7; i++) print int(101 * rand()) }'
84
39
79
80
92
19
33
6)打印输出最长输入行的长度
$ awk '{ if (length($0) > max) max = length($0) } END { print max }' demo.txt
28
7)从文件中打印输出非空行
$ awk 'NF > 0' demo.txt