awk数组统计(如何在awk中初始化数组)
本文目录
- 如何在awk中初始化数组
- Shell脚本-awk统计单词数
- 怎样用awk进行分段统计累加
- awk ’{a[$1“ “$2]++}END{for(j in a) print a[j],j}’ 解释一些每个字段的意思
- awk 计算各列的平均值
- awk中如何获取数组元素个数
- 【shell】对一条常用命令(netstat结合awk统计TCP连接数)的理解
如何在awk中初始化数组
awk的数组其实很好理解。一般编程语言的数组,其下标只能是数字,比如a,表示数组a的第四个元素。
但是awk的不同,其下标可以是任意字符或者字符串。比如a,表示数组a的一个元素,它的下标是"bob"。
比如有个文本文件alex.txt:
a 1
b 2
c 3
a 4
b 5
a 6
如果我们想统计以a开头的行后面的数字之和,就是“1+4+6”,我们用awk怎么做呢:
cat alex.txt | awk ‘{if(!array=$2;}
elae{arrary;}’
命令中有个数组array,当读取alex.txt第一行时,$1是“a”,array.
同理,读取第二行之后结果array=2,数组array就有了2个元素。
第三行之后结果是array=3,数组array就有了3个元素。
第四行之后结果是array=3
第五行之后结果是array=3
第六行之后结果是array=3
END的意思是读取完文件所有行后执行的语句,打印出数组第一个元素array.
Shell脚本-awk统计单词数
统计passwd文件每个单词出现的次数,这里以前5行为例
# head -5 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/**in/nologin
daemon:x:2:2:daemon:/**in:/**in/nologin
adm:x:3:4:adm:/var/adm:/**in/nologin
lp:x:4:7:lp:/var/spool/lpd:/**in/nologin
【思路】
【直接用awk数组的2次for循环】
}’
4 2
10
7 1
nologin 4
bin 4
x 5
adm 3
**in 5
bash 1
spool 1
var 2
0 2
1 2
lpd 1
2 2
daemon 2
root 3
lp 2
3 1
【先把数据处理成一列 -tr】
" "\n"|sed ’/^$/d’
【用awk的内置变量RS做成一列】
+" ’{print $0}’
【接下来就可以用awk单次for循环,也可以用sort+uniq处理】
怎样用awk进行分段统计累加
假定一段数据中的第四段重复量。文件名是xxx.
awk ’{a,j}’ xxx
a++意思将第四段内容放入数组,后面将遍历整个数组,以同样的内容的做为下标累计,统计有多少个J一样数据。
其他的类推
或者如下:
begin{
}
{if($0 ~ /业务流水帐/){
dipartment=$4;
count1=0;
count2=0;
while(getline){
if($0 ~ /^本项合计/){
count1 = count1+$2;
count2 = count2+$3;
}
if($0 ~ /----------/){
break;
}
}
print departmen" "count1" "count2"\n";
}
}
end{
}
awk ’{a[$1“ “$2]++}END{for(j in a) print a[j],j}’ 解释一些每个字段的意思
a
是一个关联数组,类似于c++中的map,其中$1的值是键,a对应的内容就是值,这个值如果是数字,则可以做加减运算。所以
a++
就是指数组a中下标为$1对应的值增加1;
for
(
j
in
a)
是循环遍历数组a中键值对的用法,j就是依次获取数组a中的下标
awk 计算各列的平均值
用awk来计算,用一个关联数组sum来计算列 的数据和,假设文件为file.txt
awk ’
{
for (i=2;i《=NF;++i)
{
sum+=$i
if (NR == 1 || min = $i }
if (NR == 1 || max = $i}
}
colum = NF;
row = NR
}
END {
printf ("average: ");
for (i=2; i《= colum; ++i)
{
printf("%f ", sum/row);
}
print ""
printf ("max: ");
for (i=2; i《= colum; ++i)
{
printf("%s ", max);
}
print ""
printf ("min: ");
for (i=2; i《= colum; ++i)
{
printf("%s ", min);
}
print ""
}
’ file.txt
awk中如何获取数组元素个数
使用awk的内置函数split,将第三个字段根据分隔符“-”分割并存入数组,最后跟随$1和$2逐个打印。
$ echo "aaa 3 1-2-3-4-5" | awk ’{n=split($3,a,"-");for(i=1;i《=n;i++)print $1,$2,a}’aaa 3 1aaa 3 2aaa 3 3aaa 3 4aaa 3 5
【shell】对一条常用命令(netstat结合awk统计TCP连接数)的理解
观察一 、先输出两个值,其中NF为awk正在处理记录(列)的字段 总数 ,$NF为每行 最后一个字段的值
观察二 、如下命令输出4个值,注意最后俩字段的值是怎么来的:S
观察三 、利用awk的行处理特性,遍历了所有tcp开头的行
定义出不同状态命名的数组下标,并分别++计数赋值给数组元素,最后打印$NF和数组S的值
CLOSED:无连接是活动的或正在进行
LISTEN:服务器在等待进入呼叫
SYN_RECV:一个连接请求已经到达,等待确认
SYN_SENT:应用已经开始,打开一个连接
ESTABLISHED:正常数据传输状态
FIN_WAIT1:应用说它已经完成
FIN_WAIT2:另一边已同意释放
ITMED_WAIT:等待所有分组死掉
CLOSING:两边同时尝试关闭
TIME_WAIT:另一边已初始化一个释放
LAST_ACK:等待所有分组死掉
用来统计tcp各个状态连接数的shell脚本
***隐藏网址***
***隐藏网址***
结合netstat和awk命令来统计网络连接数
***隐藏网址***
***隐藏网址***
利用netstat和awk发现并阻止DDoS攻击
***隐藏网址***
更多文章:
表格trim函数(excel表格中卡号数字后面的空格怎么一起删除)
2026年3月27日 20:40
微信小程序商微信公众号制微信小程序开发制作(如何开发微信小程序微信宣传制作a)
2026年3月27日 19:40
this is me英语自我介绍小海报(this is me英语手抄报简单)
2026年3月27日 19:20
bigdecimal 除法(java中 BigDecimal的类型的除法)
2026年3月27日 17:40






