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