Awk是一个功能强大的编辑工具,用于在Linux/UNIX下对文本和数据进行处理。数据可以来自一个或多个文件,也可以为其他命令的输出,常作为脚本来使用。在执行操作时,awk逐行读取文本,默认以空格为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,对比该行是否与给定的模式相匹配,并按模式或者条件执行编辑命令,也可以从脚本中调用编辑指令过滤输出相应内容。
1.Awk的语法结构
awk [选项] '模式或条件 {编辑指令}' 文件1 文件2
awk -f 脚本文件 文件1 文件2
在 Awk语句中,模式部分决定何时对数据进行操作,若省略则后续动作时刻保持执行状态,模式可以为条件语句、复合语句或正则表达式等。每条编辑指令可以包含多条语句,多条语句之间要使用分号或者空格分隔的多个{}区域。常用选项-F定义字段分隔符,默认以空格或者制表符作为分隔符。
2.awk常见的内建变量(可直接使用)
变量 | 描述 |
FS | 指定每行文本的字段分隔符,默认为空格或制表位。 |
NF | 当前处理的行的字段个数。 |
NR | 当前处理的行的行号(序数) |
$0 | 当前处理的行的整行内容。 |
$n | 当前处理行的第n个字段(第n列)。 |
在Awk中,缺省的情况下总是将文本文件中的一行视为一个记录,而将一行中的某一部分作为记录中的一个字段。为了操作这些不同的字段,Awk借用Sed的方法,用1,2,3,4......这样的方法来顺序的表示行中的不同字段。
3.用法示例
以冒号:为分隔符,搜索pwd.txt 有root关键字的行中的第七列。
[root@localhost ]# awk -F: '/root/ {print $7}' pwd.txt /bin/bash
/sbin/nologin
搜索pwd.txt 有root关键字的所有行
[root@localhost ]# awk '/root/' pwd.txt
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
查找带有指定字符串的行
grep "/sbin/nologin"pwd.txt
awk '/\/sbin\/nologin/{print $0}'pwd.txt