1、NF 与 $NF 的区别
NF表示:输出每一行的总数
$NF表示:输出每一行的最后一列
2、awk 使用多个分隔符
#使用 . 和空格两个分隔符
cat /etc/redhat-release | awk -F '[. ]' '{for(i=1;i<=NF;i++) print $i}'
CentOS
Linux
release
7
9
2009
(Core)
3、常用的for循环
在读取每个字段内容for(i=1;i<=NF;i++)运用很多,固定格式
cat /etc/redhat-release \
| awk -F '[. ]' '{for(i=1;i<=NF;i++){if($i~"^[0-9]"){print $i;break}}}'
~匹配: 与==相比不是精确比较
!~不匹配:不精确比较
==等于:必须全部相等,精确比较
!=不等于:精确比较
4、awk常用计算
vim test.txt
1 2 3
1 2 3
1、求和
cat test.txt | awk -F " " '{sum+=$2}END{print sum }'
2、求平均
cat test.txt|awk '{sum+=$1} END {print "Average = ", sum/NR}'
vim test.txt
2
4
3、求最大值
cat test.txt|awk 'BEGIN {max = 0} {if ($1>max) max=$1 fi} END {print "Max=", max}'
4、求最小值(min的初始值设置一个超大数即可)
cat test.txt|awk 'BEGIN {min = 1999999} {if ($1<min) min=$1 fi} END {print "Min=", min}'
5、awk外部传参
-v a=2
echo "192.168.199.200"|awk -v a=2 -F . '{print $a}'
五 awk统计字符频率
echo "aa bb aa v d 2 3 hahaha ii test" |awk '{for(i=1;i<=NF;i++)count[$i]++;{for(j in count)print j"="count[j]}}'| sort -n -k1
# 第一个for是按照空格符分割echo的输出
# count[$i]++是累加每个字符的数量,比如count[aa],有两个,会加两次
# 这个逻辑到此结束,所以用分号
# 第二个for是输出list
结果:
aa=2
bb=1
d=1
hahaha=1
ii=1
test=1
v=1
2=1
3=1