awk的选项

-v    参数传递
-f    指定脚本文件
-F    指定分隔符
-V    查看awk的版本号

-v的使用 、可以把外部变量引入内部进行使用

[root@docker-host sh]# num1=20
[root@docker-host sh]# var="hello world"
[root@docker-host sh]# awk 'BEGIN{print $num1}'

[root@docker-host sh]# awk  -v num2=$num1 'BEGIN{print num2}'
20
#注意以为var是字符串、并且里面包含空格所以要加”引号
[root@docker-host sh]# awk  -v num2=$num1 -v var1="$var" 'BEGIN{print num2,var1}'
20 hello world
[root@docker-host sh]#

-F 指定分隔符

awk 'BEGIN{FS=":"}{print $7}' /etc/passwd
等价于
[root@docker-host sh]# awk  -F ":" '{print $7}' /etc/passwd
/bin/bash
/sbin/nologin

AWK数组的用法

回顾shell中数组的用法:

array=("Allen" "Mike" "Messi" "Jerry" "Hanmeimei" "wang")

打印元素: echo ${array[2]}
打印元素个数: echo ${#array[@]}
打印元素长度: echo ${#array[3]}
给元素赋值:   array[3]="Li"
分片访问:    echo ${array[@]:1:3}
删除元素:    unset array[2];unset array;
元素内容替换:  ${array[@]/e/E} 只替换第一个e
元素内容替换:  ${array[@]//e/E} 替换所有的e
数组的遍历:

for a in ${array[@]}
do
   echo  $a

done

[root@docker-host sh]# for a in ${array[@]}; do echo $a; done;
Allen
Mike
Messi

注意unset 数组array[2] 内容被清空但实际下标还在保留。

AWK数组使用

统计主机上所有的TCP连接状态数,按照每个TCP状态分类

netstat -an |grep tcp |awk '{array[$6]++}END{for(a in array){print a,array[a]}}'

[root@docker-host sh]# netstat -an |grep tcp |awk '{array[$6]++}END{for(a in array){print a,array[a]}}'
LISTEN 7
ESTABLISHED 1
TIME_WAIT 9

图

Last modification:February 1, 2020
如果觉得我的文章对你有用,请随意赞赏