语法:
awk [options] 'pattern{action}' {filenames}
#pattern:表示AWK在数据中查找的内容,就是匹配模式
#action:在找到匹配内容时所执行的一系列命令
选项参数说明
选项参数 | 功能 |
---|---|
-F | 指定输入文件拆分分隔符 |
-v | 赋值一个用户定义变量 |
awk内置变量
内置变量 | 含义 |
---|---|
ARGC | 命令行参数个数 |
ARGV | 命令行参数排列 |
ENVIRON | 支持队列中系统环境变量的使用 |
FILENAME | awk浏览的文件名 |
FNR | 浏览文件的记录数 |
FS | 设置输入域分隔符,等价于命令行 -F选项 |
NF | 浏览记录的域的个数, 根据分隔符分割后的列数 |
NR | 已读的记录数, 也是行号 |
OFS | 输出域分隔符 |
ORS | 输出记录分隔符 |
RS | 控制记录分隔符 |
$n | $0 变量是指整条记录。$1 表示当前行的第一个域,$2 表示当前行的第二个域,......以此类推。 |
$NF | $NF是number finally,表示最后一列的信息,跟变量NF是有区别的,变量NF统计的是每行列的总数 |
演示:
1)默认每行空格切割数据
echo "abc 123 456" | awk '{print $1"&"$2"&"$3}'
2)打印含有匹配信息的行
搜索awk.txt文件有root关键字的所有行
awk '/root/' awk.txt
# '/root/' 是查找匹配模式, 没有action命令, 默认输出所有符合的行数据
3)打印匹配行中第7列数据
搜索awk.txt文件有root关键字的所有行, 然后以":"拆分并打印输出第7列
awk -F : '/root/{print $7}' awk.txt
4)打印文件每行属性信息
统计awk.txt文件名,每行的行号,每行的列数,对应的完整行内容:
awk -F : '{print "文件名:" FILENAME ",行号:" NR",列数:" NF",完整行内容:" $0}' awk.txt
5)查找以c开头的资源
awk过滤的使用, 查找当前目录下文件名以c开头的文件列表
ls -a|awk '/^c/' awk.txt
6)打印第一列
按照":" 分割查询第一列打印输出
awk -F : '{print $1}' awk.txt
7)打印最后1列
按照":" 分割查询最后一列打印输出
awk -F : '{print $NF}' awk.txt
8)打印倒数第二列
按照":" 分割查询倒数第二列打印输出
awk -F : '{print $(NF-1)}' awk.txt
# $(NF-N) N是几, 就是倒数第几列
9)打印10到20行的第一列
获取第10到20行的第一列的信息
awk -F : '{if (NR>9 && NR<21) print $1}' awk.txt
10)多分隔符使用
"1:2/3"字符串按照多个分隔符":"或者"/" 分割, 并打印分割后每个列数据
echo "1:2/3"|awk -F [:/] '{print " "$1" " $2" " $3}'
11)添加开始与结束内容
给数据添加开始与结束
echo -e "abc\nabc" | awk 'BEGIN{print "开始..."} {print $0} END{print "结束..."}'
# BEGIN 在所有数据读取行之前执行;END 在所有数据执行之后执行。
12)显示空行行号
查询sed.txt中空行所在的行号
sed 'G' sed.txt | awk '/^$/{print NR}'
13)切割ip
切割IP
ifconfig |awk '/broadcast/{print}' | awk -F " " '{print $2}'