您的位置:首页 > 其它

awk的数组

2014-03-12 10:11 99 查看
1、创建一个test文件
# cat test
a 45
b 12
a 3
b 4
统计各个相同字母对应的数字和
# awk '{A[$1]+=$2} END {for (i in A) print i , A[i]}' test
a 48
b 16

awk提供BEGIN和END的作用是给程序赋予初始状态和在程序结束之后执行一些扫尾的工作。

任何在BEGIN之后列出的操作(在{}内)将在Unix awk开始扫描输入之前执行,而END之后列出的操作将在扫描完全部的输入之后执行。因此,通常使用BEGIN来显示变量和预置(初始化)变量,使用END来输出最终结果。

2、我们看一下下面一句,就理解END的意义
# awk '{A[$1]+=$2} {for (i in A) print i , A[i]}' test
a 45
a 45
b 12
a 48
b 12
a 48
b 16
这里显示,如果没有END,就是前面的数组执行一次,后面的for循环执行一次,加上END后,等前面的数组执行完了,才执行后面的for语句

3、下面我们看一下BEGIN的用法
# awk 'BEGIN{WHO="who"} {A[$1]+=$2} END {for (i in A) print i , A[i] , WHO}' test
a 48 who
b 16 who
GEGIN就是起到一个初始化的意义!

4、一个统计进程TCP连接数的脚本
#!/bin/bash
#
while [ "1"="1" ]
do
echo -e "*********************************"
netstat -np | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'|sort -k2 -n|grep -v '-'|grep -v 'httpd'|grep '/' > /dev/shm/txt
while read A COUNT
do
if [ $COUNT -le 800 ]; then
echo -e "`ps -ef | grep ${A%/*} 2>&1| grep -v grep | awk '{print $1}'`\t$A\t$COUNT"
else
echo -e "\033[31m`ps -ef | grep ${A%/*} 2>&1| grep -v grep | awk '{print $1}'`\t$A\t$COUNT\033[0m"
fi
done < /dev/shm/txt
#rm -f txt
sleep 5
done
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  awk