找出ifconfig命令结果中的1-255之间的数值;
ifconfig eth0 |egrep -o '[0-9]+'|awk '$1>=1 && $1<=255 '
ifconfig eth0 |awk -vRS="[^0-9]+" '$1>=1 && $1<=255 '
#取出系统磁盘使用率大于等于5%小于等于 90%的磁盘分区名称和挂载点
[root@web01 ~]# df -h|awk -F"[ %]+" '$5>=5'
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 19G 2.5G 17G 13% /
/dev/sda1 253M 136M 118M 54% /boot
[root@web01 ~]# df -h|awk '$5+0>=5'
/dev/sda3 19G 2.5G 17G 13% /
/dev/sda1 253M 136M 118M 54% /boot
[root@web01 ~]# df -h|awk -F"[ %]+" '$5>=5'
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 19G 2.5G 17G 13% /
/dev/sda1 253M 136M 118M 54% /boot
[root@web01 ~]# df -h|awk '$5+0>=5'
/dev/sda3 19G 2.5G 17G 13% /
/dev/sda1 253M 136M 118M 54% /boot
[root@web01 ~]# df -h|awk '$5+0>=5 && $5<=90'
[root@web01 ~]# df -h|awk '$5+0>=5 && $5<=90'
/dev/sda3 19G 2.5G 17G 13% /
/dev/sda1 253M 136M 118M 54% /boot
[root@web01 ~]# df -h|awk '$5+0>=5 && $5+0<=90'
/dev/sda3 19G 2.5G 17G 13% /
/dev/sda1 253M 136M 118M 54% /boot
array=(1 2 3 5 6)
${array[0]}
${array[1]}
for n in ${array[*]}
do
echo $n
done
for((i=0;i<${#array[*]};i++))
do
echo ${array[i]}
done
[root@web01 ~]# awk 'BEGIN{h[1]="oldboy";h[119]="bingbing";h[110]="lidao";h[12306]="feng"; print h[1],h[119] }'
oldboy bingbing
awk数组的循环:
array=(1 2 3 5 6)
${array[0]}
${array[1]}
for n in ${array[*]} for( n in h ) for(变量 in 数组名称) 变量中存放数组的下标
do print n,h[n] #h[n] 变量内容
echo $n
done
awk 'BEGIN{h[1]="oldboy";h[119]="bingbing";h[110]="lidao"; for(n in h)print n,h[n] }'|column -t
119 bingbing
110 lidao
1 oldboy
awk 'BEGIN{h[1]="oldboy";h[2]="oldboy1";for(n in h)print h[n]}'
for(n in h)
;
print h[n]
[root@web01 ~]# awk -F'[/.]+' '{h[$2]++}END{for(n in h)print n,h[n]}' url.txt
www 3
mp3 1
post 2
#命令的执行过程 分析
[root@web01 ~]# awk -F'[/.]+' '{h[$2]++}END{for(n in h)print n,h[n]}' url.txt
www 3
mp3 1
post 2
14:58:39
https://www.processon.com/view/link/5a125935e4b049e7f4ffa434
老男孩教育出品-awk计算总和-累加的详细过程
[root@web01 ~]# awk -F'[/.]+' '{h[$2]++}END{for(n in h)print n,h[n]}' url.txt
www 3
mp3 1
post 2
[root@web01 ~]# awk -F'[/.]+' '{h[$2]++;print h["www"]}' url.txt
1
2
2
2
3
3
[root@web01 ~]# #分析 secure日志 每个用户被破解的次数
[root@web01 ~]# #分析 secure日志 每个ip破解你系统密码的次数 (每个ip的出现次数)
[root@web01 ~]# #分析 access.log 每个ip出现的次数
[root@web01 ~]# #显示前10名
awk '$6~/Failed/{h[$(NF-5)]++}END{for(n in h)print n,h[n]}' secure-20161219 |sort -rnk2 |head
awk '$6~/Failed/{h[$(NF-3)]++}END{for(n in h)print n,h[n]}' secure-20161219 |sort -rnk2 |head
awk '{h[$1]++}END{for(n in h)print n,h[n]}' access.log |sort -rnk2 |head
cal.txt
a 2
b 3
c 4
a 5
a 5
d 6
e 7
b 3
f 5
要求结果
a 12
b 6
c 4
d 6
e 7
f 5
统计access.log中 每个ip地址使用流量
[root@web01 ~]# awk '{s[$1]+=$10}END{for(n in s)print n,s[n]}' access.log |sort -rnk2 |head
114.83.184.139 31362956
117.136.66.10 22431302
116.216.30.47 21466000
223.104.5.197 21464856
116.216.0.60 19145329
114.141.164.180 17219553
114.111.166.22 17121524
223.104.5.202 16911512
116.228.21.187 15969887
112.64.171.98 15255013
[root@web01 ~]# awk '{s[$1]+=$2}END{for(n in s)print n,s[n]}' cal.txt
a 12
b 6
c 4
d 6
e 7
f 5
[root@web01 ~]# df -h | awk -F"[ %]+" '{if($5>5)print $1,$NF ;else print "没有大于5%"}'
文件系统 挂载点
/dev/sda3 /
没有大于5%
没有大于5%
没有大于5%
没有大于5%
/dev/sda1 /boot
没有大于5%
df -h | awk -F"[ %]+" '{
if($5>5)
print $1,$NF ;
else
print "没有大于5%"
}'
企业面试题:请过滤range.log中在device: {}里面出现了多少次oldboy,过滤并统计出来。
oldboy is a linuxer.
device: {
oo
oldboy
no sql
this is log
niu niu
}
oldboy
device: {
oldboy
no sql
this is log
niu niu
}
oldboy
device: {
oldboy
no sql
this is log
niu niu
}
device: {
oldboy
no sql
this is log
niu niu
}
[root@web01 ~]# awk '/{/,/}/{if(/oldboy/) i++} END{print i}' range.txt
4
[root@web01 ~]#
[root@web01 ~]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@web01 ~]# #如果是奇数行 显示"奇数" 偶数行“偶数"
xargs -n3
1 2
3 4 5
6
7
8
9
10
[root@web01 ~]# awk '{if(NR%3==0) ORS="\n";else ORS=" "}1' num.txt
1 2
3 4 5
6 7 8
9 10 [root@web01 ~]#
for((i=0;i<${#array[*]};i++)) for(i=1;i<=100;i++)
do s+=i
echo ${array[i]}
done
企业面试题:统计每个学生的总成绩和平均成绩:
#cat chengji.txt
waiwai 90 98 98 96 96 92
xiaoyu 70 77 85 83 70 89
gege 85 92 78 94 88 91
xingxing 89 90 85 94 90 95
bingbing 84 88 80 92 84 8
dandan 64 80 60 60 61 62
[root@web01 ~]# awk '{sum=0;for(i=2;i<=NF;i++)sum+=$i;print sum,sum/(NF-1)}' countn.txt
570 95
474 79
528 88
543 90.5
436 72.6667
387 64.5
[root@web01 ~]# awk '{
sum=0;
for(i=2;i<=NF;i++)
sum+=$i;
print sum,sum/(NF-1)
}' countn.txt
函数
awk '{gsub(/bing/,"oldbing")}1' countn.txt
[root@web01 ~]# awk '{print substr($4,14,8)}' access.log |head
11:02:00
11:02:00
11:02:00
11:02:00
11:02:00
11:02:00
11:02:00
11:02:00
11:02:00
11:02:00
argument 参数
企业面试题:根据指定条件合并两个文件
cd /server/files
cat >>info1.txt< 001,小明 002,小张 003,小王 EOF cat >>info2.txt< 001,男,25 002,女,21 003,男,20 EOF 要求结果: 001,小明,男,25 002,小张,女,21 003,小王,男,20 [root@web01 ~]# grep -P '(?<=id:)[0-9]+' oldboy.txt id:1 id:2 id:6666 999 [root@web01 ~]# grep -oP '(?<=id:)[0-9]+' oldboy.txt 1 2 6666