awk執(zhí)行過(guò)程
awk取行
awk取列
awk過(guò)濾(模式與動(dòng)作)
awk數(shù)組
awk判斷
awk循環(huán)
.1 awk概述
awk 語(yǔ)言 單行腳本
gnu awk gawk
[root@m01 /server/files]# awk -F: 'BEGIN{print "name","UID"}{print $1,$3}END{print "文件處理完成"}'
/etc/passwd |column -t
name UID
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
mail 8
operator 11
games 12
ftp 14
nobody 99
systemd-network 192
dbus 81
polkitd 999
tss 59
abrt 173
sshd 74
postfix 89
oldboy 1000
ntp 38
lidao 1001
zhuzhuzhu 1002
fourzhu 1003
aliyun 1004
openvpn 998
tcpdump 72
tomcat 53
quede_user_name666 1005
quede_user_name666-01 1006
quede_user_name666-01... 1007
nginx 997
文件處理完成
2 .awk 行與列
1) 取行
###案例01 取文件的第1行 ※※※※※
[root@m01 /server/files]# awk 'NR==1' sed.txt
101,oldboy,CEO
###案例02 取出文件中 第3行到最后一行 ※※※※※
[root@m01 /server/files]# awk 'NR>=3' sed.txt
103,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
119,huiling,CFO
###案例03 取出文件中 第3行到第5行 ※※※※※
[root@m01 /server/files]# awk 'NR>=3 && NR<=5' sed.txt
103,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
#&& 并且 同時(shí)成立
#|| 或者
###案例04 模糊查詢(xún) 找出文件中包含 oldboy或lidao的行 ※※※※※
[root@m01 /server/files]# awk '/oldboy|lidao/' sed.txt
101,oldboy,CEO
110,lidao,COCO
###案例05 模糊查詢(xún),表示范圍 從包含oldboy的行到包含lidao的行 ※※※※※
[root@m01 /server/files]# awk '/oldboy/,/lidao/' sed.txt
101,oldboy,CEO
102,zhangya,CTO
103,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
110,lidao,COCO
###案例06 第3行到第5行
[root@m01 /server/files]# awk 'NR==3,NR==5' sed.txt
103,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
[root@m01 /server/files]# sed -n '3,5p' sed.txt
103,李導(dǎo)996,COO
104,yy,CFO
105,feixue,CIO
[root@m01 /server/files]#
###案例進(jìn)階07 通過(guò)RS控制每行的結(jié)束標(biāo)記
[root@m01 /server/files]# awk '{print NR,$0}' sed.txt
1 101,oldboy,CEO
2 102,zhangya,CTO
3 103,李導(dǎo)996,COO
4 104,yy,CFO
5 105,feixue,CIO
6 110,lidao,COCO
7 119,huiling,CFO
[root@m01 /server/files]# awk -vRS=, '{print NR,$0}' sed.txt
1 101
2 oldboy
3 CEO
102
4 zhangya
5 CTO
103
6 李導(dǎo)996
7 COO
104
8 yy
9 CFO
105
10 feixue
11 CIO
2) 取列
awk -F
awk -vFS
#案例01 顯示 /etc/passwd 第1列第3列
[root@m01 /server/files]# awk -F: '{print $1,$3}' /etc/passwd
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
shutdown 6
halt 7
#注意: 在awk中 $數(shù)字 $內(nèi)容 取某一列
#案例02 顯示第1列和第3列和最后一列
[root@m01 /server/files]# awk -F: '{print $1,$3,$NF}' /etc/passwd
#案例03 顯示第1列和第3列和最后一列 中間通過(guò)#分割
[root@m01 /server/files]# awk -F: -vOFS=# '{print $1,$3,$NF}' /etc/passwd
root#0#/bin/bash
bin#1#/sbin/nologin
daemon#2#/sbin/nologin
adm#3#/sbin/nologin
lp#4#/sbin/nologin
sync#5#/bin/sync
shutdown#6#/sbin/shutdown
halt#7#/sbin/halt
-v 修改或設(shè)置awk變量
3) 綜合 取行與取列
#案例01 取出top 命令中運(yùn)行時(shí)間
[root@m01 /server/files]# top -n1 |awk -F'[ ,]+' 'NR==1{print $5}'
14:49
[root@m01 /server/files]# # '找誰(shuí){干啥}'
#案例02 取出網(wǎng)卡配置文件中的ip部分
[root@m01 /server/files]# awk '/IPADDR/' /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=10.0.0.61
[root@m01 /server/files]# awk '/IPADDR/{print $0}' /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=10.0.0.61
[root@m01 /server/files]# awk '/IPADDR/{print }' /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=10.0.0.61
[root@m01 /server/files]# awk -F= '/IPADDR/{print $2}' /etc/sysconfig/network-scripts/ifcfg-eth0
10.0.0.61
#案例03
mkdir -p /server/files/
cat >>/server/files/reg.txt<<EOF
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
EOF
姓氏是Zhang的人藤滥,顯示他的第二次捐款金額及她的名字
顯示所有以41開(kāi)頭的ID號(hào)碼的人的全名和ID號(hào)碼
顯示所有ID號(hào)碼最后一位數(shù)字是1或5的人的全名
顯示Xiaoyu的捐款.每個(gè)值時(shí)都有以$開(kāi)頭.如$520$200$135
#姓氏是Zhang的人芳肌,顯示他的第二次捐款金額及她的名字
[root@m01 /server/files]# ##某一列中包含什么內(nèi)容
[root@m01 /server/files]#
[root@m01 /server/files]# awk '$1~/Zhang/' reg.txt
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
[root@m01 /server/files]# # $1~/Zhang/
[root@m01 /server/files]# # 第1列 匹配/包含 /Zhang/
[root@m01 /server/files]# awk -F'[ :]+' '$1~/Zhang/{print $NF-1}' reg.txt
174
200
[root@m01 /server/files]# awk -F'[ :]+' '$1~/Zhang/{print $(NF-1)}' reg.txt
100
90
[root@m01 /server/files]# awk -F'[ :]+' '$1~/Zhang/{print $1,$2,$(NF-1)}' reg.txt
Zhang Dandan 100
Zhang Xiaoyu 90
#顯示所有以41開(kāi)頭的ID號(hào)碼的人的全名和ID號(hào)碼
[root@m01 /server/files]# awk '$3~/^41/' reg.txt
Zhang Dandan 41117397 :250:100:175
Liu Bingbing 41117483 :250:100:175
[root@m01 /server/files]# awk '$3~/^41/{print $1,$2,$3}' reg.txt
Zhang Dandan 41117397
Liu Bingbing 41117483
#顯示所有ID號(hào)碼最后一位數(shù)字是1或5的人的全名
[root@m01 /server/files]# awk '$3~/[15]$/' reg.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75
Wang Xiaoai 3515064655 :50:95:135
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
[root@m01 /server/files]# awk '$3~/(1|5)$/' reg.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75
Wang Xiaoai 3515064655 :50:95:135
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
[root@m01 /server/files]# awk '$3~/(1|5)$/{print $1,$2}' reg.txt
Zhang Xiaoyu
Wu Waiwai
Wang Xiaoai
Li Youjiu
Lao Nanhai
#每個(gè)值時(shí)都有以$開(kāi)頭.如$520$200$135
[root@m01 /server/files]# awk '{gsub(/:/,"$") ;print }' reg.txt
Zhang Dandan 41117397 $250$100$175
Zhang Xiaoyu 390320151 $155$90$201
Meng Feixue 80042789 $250$60$50
Wu Waiwai 70271111 $250$80$75
Liu Bingbing 41117483 $250$100$175
Wang Xiaoai 3515064655 $50$95$135
Zi Gege 1986787350 $250$168$200
Li Youjiu 918391635 $175$75$300
Lao Nanhai 918391635 $250$100$175
[root@m01 /server/files]# awk '/Wang/{gsub(/:/,"$") ;print }' reg.txt
Wang Xiaoai 3515064655 $50$95$135
gsub(/找誰(shuí)/,"替換成什么")
gsub(/找誰(shuí)/,"替換成什么",指定某一列)
綜合應(yīng)用 : 找出ifconfig命令結(jié)果中的1-255之間的數(shù)值踢步;
ifconfig |egrep '[0-9]+' -o |awk '$0>=1 && $0<=255'
ifconfig |egrep '[0-9]+' -o |awk '$0>=1 && $0<=255'
ifconfig
#只要不是數(shù)字,就是行的結(jié)束標(biāo)記
ifconfig | awk -vRS='[^0-9]+' '{print NR,$0}'
ifconfig | awk -vRS='[^0-9]+' '{print $0}'
ifconfig | awk -vRS='[^0-9]+' '$0>=1 && $0<=255'
ifconfig | awk -vRS='[^0-9]+' '$0>=200 && $0<=255'
3 模式與動(dòng)作
1) 概述
awk -F: 'NR==1{print $1,$3}' /etc/passwd
'模式{動(dòng)作}'
'條件{命令}'
awk中哪些可以作為條件/模式
正則表達(dá)式作為模式 匹配 '//' '$1~//' $1!~//
m 比較表達(dá)式作為模式 NR>10
m 范圍模式
m 特殊模式BEGIN和END
#awk中哪些內(nèi)容可以做為動(dòng)作(命令)
print
awk函數(shù): gsub
變量賦值
統(tǒng)計(jì)計(jì)算
2) BEGIN
案列
#1. 統(tǒng)計(jì)計(jì)算
[root@m01 /server/scripts]# awk 'BEGIN{ print 1/3 }'
0.333333
[root@m01 /server/scripts]#
#3. 顯示標(biāo)題
[root@m01 /server/scripts]# awk -F: 'BEGIN{print "name","UID"} {print $1,$3}' /etc/passwd|column -
tname UID
root 0
bin 1
daemon 2
adm 3
lp 4
sync 5
3) END{}
#案例01 統(tǒng)計(jì)/etc/services 中 一共有多少行
#條件: 無(wú)
#動(dòng)作: i++
i=i+1 == i++ 進(jìn)行計(jì)數(shù) 統(tǒng)計(jì)次數(shù)
[root@m01 /server/scripts]# awk '{i++}END{print i}' /etc/services
11176
wc -l /etc/services
awk 'END{print NR}' /etc/services
sed -n '$=' /etc/services
#案例02 統(tǒng)計(jì) /etc/services 中空行的數(shù)量
[root@m01 /server/scripts]# awk '/^$/' /etc/services |wc -l
17
[root@m01 /server/scripts]# awk '/^$/{i++}END{print i}' /etc/services
17
[root@m01 /server/scripts]#
#案例03 統(tǒng)計(jì)access.log中 總共使用多少流量
[root@m01 /server/files]# cat age.txt
姓名 年齡
小胖 18
慧老師 15
康熙 99
李導(dǎo) 996
[root@m01 /server/files]# awk 'NR>1{i=i+$2}END{print i}' age.txt
[root@m01 /server/files]# awk 'NR>1{i=i+$2}END{print i}' age.txt
1128
#案例04 統(tǒng)計(jì)access.log中 狀態(tài)碼是200的次數(shù),及狀態(tài)碼為200的流量總和
#條件(模式) : 狀態(tài)碼是200
#動(dòng)作:
統(tǒng)計(jì)次數(shù): i++
統(tǒng)計(jì)流量總和 : sum=sum+$????
#書(shū)寫(xiě)條件
[root@m01 /server/files]# less access.log
[root@m01 /server/files]# less access.log
[root@m01 /server/files]# #$9 狀態(tài)碼
[root@m01 /server/files]# #$10 大小/流量
[root@m01 /server/files]# #書(shū)寫(xiě)條件
[root@m01 /server/files]# #awk '$9==200' access.log
[root@m01 /server/files]# #awk '$9~/^200$/' access.log
[root@m01 /server/files]# awk '$9==200' access.log |head
#書(shū)寫(xiě)動(dòng)作
[root@m01 /server/files]# awk '$9==200{i++ ; sum=sum+$10}END{print "200次數(shù):"i,"200流量總和:"sum}'
access.log
200次數(shù):142666 200流量總和:2476750207
[root@m01 /server/files]# wc -l access.log
166945 access.log
[root@m01 /server/files]# awk '$9==200{i++ ; sum=sum+$10}END{print i,sum}' access.log
142666 2476750207
[root@m01 /server/files]#
##了解
awk '
$9==200{
i++ ;
sum=sum+$10
}
END{
print i,sum
}' access.log
[root@m01 /server/files]# cat #awk
#!/bin/awk
$9==200{
i++ ;
sum=sum+$10
}
END{
print i,sum
}
[root@m01 /server/files]# awk -f #awk access.log
142666 2476750207
##案例05 統(tǒng)計(jì)access.log中 狀態(tài)碼是4xx或5xx的次數(shù)及的流量總
#條件 狀態(tài)碼是4或5開(kāi)頭
#動(dòng)作
統(tǒng)計(jì)次數(shù) i++
進(jìn)行求和 sum+=$????
[root@m01 /server/files]# awk '$9~/^[45]/{ i++; sum+=$10 } END{print i,sum}' access.log
4630 1624526
[root@m01 /server/files]# awk '$9~/^2/{ i++; sum+=$10 } END{print i,sum}' access.log
142666 2476750207
[root@m01 /server/files]# awk '$9~/^3/{ i++; sum+=$10 } END{print i,sum}' access.log
19647 121930
[root@m01 /server/files]#
#最終需求: 分別統(tǒng)計(jì)每種狀態(tài)碼的次數(shù)及流量總和
awk '
$9~/^2/{ i2++; sum2+=$10 }
$9~/^3/{ i3++; sum3+=$10 }
$9~/^4/{ i4++; sum4+=$10 }
$9~/^5/{ i5++; sum5+=$10 }
END{
print "2xx:",i2,sum2;
print "3xx:",i3,sum3;
print "4xx:",i4,sum4;
print "5xx:",i5,sum5;
}' access.log|column -t
[root@m01 /server/files]# awk '
> $9~/^2/{ i2++; sum2+=$10 }
> $9~/^3/{ i3++; sum3+=$10 }
> $9~/^4/{ i4++; sum4+=$10 }
> $9~/^5/{ i5++; sum5+=$10 }
> END{
> print "2xx:",i2,sum2;
> print "3xx:",i3,sum3;
> print "4xx:",i4,sum4;
> print "5xx:",i5,sum5;
> }' access.log|column -t
2xx: 142666 2476750207
3xx: 19647 121930
4xx: 4623 1606833
5xx: 7 17693
[root@m01 /server/files]#
#統(tǒng)計(jì)ip
#統(tǒng)計(jì) 用戶(hù)名
#統(tǒng)計(jì)域名
4. awk數(shù)組
應(yīng)用場(chǎng)景: 分類(lèi)統(tǒng)計(jì)
最簡(jiǎn)單: 統(tǒng)計(jì)每個(gè)ip出現(xiàn)的次數(shù),每種狀態(tài)碼出現(xiàn)的次數(shù), 每個(gè)用戶(hù)名出現(xiàn)的次數(shù), 每個(gè)攻擊你網(wǎng)站的ip的出現(xiàn)次數(shù)
必用awk數(shù)組: 分類(lèi)求和(分類(lèi)匯總)
案列
[root@m01 /server/files]# awk '{print $1}' access.log |sort |uniq -c |sort -rn |head
12049 58.220.223.62
10856 112.64.171.98
1982 114.83.184.139
1662 117.136.66.10
1318 115.29.245.13
961 223.104.5.197
957 116.216.0.60
939 180.111.48.14
871 223.104.5.202
869 223.104.4.139
[root@m01 /server/files]# #i++
[root@m01 /server/files]#
[root@m01 /server/files]# #sum+=$....
使用awk數(shù)組
awk數(shù)組賦值
awk數(shù)組取值
awk數(shù)組批量取值
案列
# hotel[110]
hotel 數(shù)組名字
[110] 數(shù)組下標(biāo)/元素名稱(chēng)/索引
#awk數(shù)組賦值 取值
[root@m01 /server/files]# awk 'BEGIN{hotel[110]="lidao" ; hotel[119]="pang"; print hotel[110],hotel[119]
}'
lidao pang
awk 'BEGIN{
hotel[110]="lidao" ;
hotel[119]="pang";
print hotel[110],hotel[119] }'
#awk數(shù)組批量取值
案列
[root@m01 /server/files]# awk 'BEGIN{hotel[110]="lidao" ; hotel[119]="pang";
> for(n in hotel)
> print n }'
119
110
[root@m01 /server/files]# awk 'BEGIN{hotel[110]="lidao" ; hotel[119]="pang";
for(n in hotel)
print hotel[n] }'
pang
lidao
[root@m01 /server/files]# awk 'BEGIN{hotel[110]="lidao" ; hotel[119]="pang";
for(n in hotel)
print n,hotel[n] }'
119 pang
110 lidao
[root@m01 /server/files]#
#案例01 i++
企業(yè)面試題1:統(tǒng)計(jì)域名訪(fǎng)問(wèn)次數(shù)
處理以下文件內(nèi)容,將域名取出并根據(jù)域名進(jìn)行計(jì)數(shù)排序處理:(百度和sohu面試題)
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html
i++ #統(tǒng)計(jì)單一個(gè)內(nèi)容
數(shù)組++ #對(duì)號(hào)入座,分類(lèi)統(tǒng)計(jì)
array[ ]++ 下標(biāo)寫(xiě)什么 統(tǒng)計(jì)什么 統(tǒng)計(jì)ip寫(xiě)ip所在那一列 $1
統(tǒng)計(jì)狀態(tài)碼 $9
[root@m01 /server/files]# awk -F'[/.]+' '{print $2}' url.txt
www
www
post
mp3
www
post
[root@m01 /server/files]# awk -F'[/.]+' '{url[$2]++}END{for(n in url) print n,url[n] }' url.txt
www 3
mp3 1
post 2
[root@m01 /server/files]#
#案例02 統(tǒng)計(jì)access.log中每個(gè)ip使用的流量總和
##條件 處理哪行 無(wú)
##動(dòng)作 h[$1]=h[$1]+$10
eg
ip1 流量總和
ip2 流量總和
awk '{h[$1]=h[$1]+$10} END{for(ip in h)print ip,h[ip]} ' access.log
[root@m01 /server/files]# awk '{h[$1]=h[$1]+$10} END{for(ip in h)print ip,h[ip]} ' 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
#案例03 統(tǒng)計(jì)每個(gè)ip出現(xiàn)的次數(shù) 及使用的流量
#條件: 無(wú)
#動(dòng)作:
cnt[$1]++ #統(tǒng)計(jì)ip出現(xiàn)的次數(shù)
sum[$1]+=$10 #統(tǒng)計(jì)ip使用的流量
awk '{ cnt[$1]++; sum[$1]+=$10; } END{ for(ip in cnt) print ip,cnt[ip],sum[ip] }' access.log
|column -t |sort -rn -k2 -k3
[root@m01 /server/files]# awk '{
cnt[$1]++;
sum[$1]+=$10;
}
END{
for(ip in cnt)
print ip,cnt[ip],sum[ip]
}' access.log |column -t |sort -rn -k2 -k3
5 .awk if
# 單分支判斷
if(條件) #
指令
# 雙分支 判斷
if($1~/root/)
print $1,$3
else
print $5,$NF
[root@m01 /server/files]# ifconfig | awk -vRS='[^0-9]+' '$0>=200 && $0<=255'
[root@m01 /server/files]# ifconfig | awk -vRS='[^0-9]+' '{if($0>=200 && $0<=255) print }'
255
255
255
255
250
255
255
#案例01 判斷磁盤(pán)使用率 大于70% 如果大于 顯示磁盤(pán)空間不足 如果不大于 顯示正常
[root@m01 /server/files]# df -h |awk -F'[ %]+' 'NR>1{if($5>70) print "磁盤(pán)空間不足"; else print "正常" }'
正常
正常
正常
正常
正常
正常
正常
正常
[root@m01 /server/files]# df -h |awk -F'[ %]+' 'NR>1{
> if( $5>70 )
> print "no space left on device"
> else
> print "disk is ok"
> }'
disk is ok
disk is ok
disk is ok
disk is ok
disk is ok
disk is ok
disk is ok
disk is ok
6 .awk for
# awk數(shù)組專(zhuān)用 for循環(huán)
for(ip in h)
print ip,h[ip]
#awk 通用for循環(huán) c語(yǔ)言循環(huán)
for(i=1;i<=10;i++)
print i
#案例01 計(jì)算1+....+100
[root@m01 /server/files]# awk 'BEGIN{
> for(i=1;i<=100;i++)
> sum+=i
> print sum
> }'
5050
[root@m01 /server/files]#
[root@m01 /server/files]# awk 'BEGIN{
for(i=1;i<=100;i++)
{
> sum+=i
> print sum
> }
> }'
#案例02 企業(yè)面試題:統(tǒng)計(jì)每個(gè)學(xué)生的總成績(jī)和平均成績(jī):
#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 82
dandan 64 80 60 60 61 62
#條件: 無(wú)
#動(dòng)作:
## 1. 求和每個(gè)人的成績(jī)求和 sum
## 2. 計(jì)算平均成績(jī) sum/6
## 3. 輸出
[root@m01 /server/files]# cat grade.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 82
dandan 64 80 60 60 61 62
[root@m01 /server/files]# ## 1. 求和每個(gè)人的成績(jī)求和 sum
[root@m01 /server/files]# ## 2. 計(jì)算平均成績(jī) sum/6
[root@m01 /server/files]# ## 3. 輸出
[root@m01 /server/files]# awk '{
> sum=$2+$3+$4+$5+$6+$7
> avg=sum/6
> print $1,avg
> }' grade.txt
waiwai 95
xiaoyu 79
gege 88
xingxing 90.5
bingbing 85
dandan 64.5
#案例03 企業(yè)面試題:統(tǒng)計(jì)每個(gè)學(xué)生的總成績(jī)和平均成績(jī):
#cat chengji.txt
waiwai 90 98 98 96 96 92
xiaoyu 70 77
gege 85 92 78 94 88 91
xingxing 89 90 85
bingbing 84 88 80 92 84 82
dandan 64 80 61 62
[root@m01 /server/files]# cat grade2.txt
waiwai 90 98 98 96 96 92
xiaoyu 70 77
gege 85 92 78 94 88 91
xingxing 89 90 85
bingbing 84 88 80 92 84 82
dandan 64 80 61 62
[root@m01 /server/files]# awk '{for(i=2;i<=NF;i++) print $1,$i }' grade2.txt
[root@m01 /server/files]# awk '{for(i=2;i<=NF;i++) print $1,$i }' grade2.txt
waiwai 90
waiwai 98
waiwai 98
waiwai 96
waiwai 96
waiwai 92
xiaoyu 70
xiaoyu 77
gege 85
gege 92
gege 78
gege 94
gege 88
gege 91
xingxing 89
xingxing 90
xingxing 85
bingbing 84
bingbing 88
bingbing 80
bingbing 92
bingbing 84
bingbing 82
dandan 64
dandan 80
dandan 61
dandan 62
[root@m01 /server/files]#
[root@m01 /server/files]# awk '{for(i=2;i<=NF;i++) sum+=$i ;print sum }' grade2.txt
570
717
1245
1509
2019
2286
[root@m01 /server/files]# awk '{sum=0;for(i=2;i<=NF;i++) sum+=$i ;print sum }' grade2.txt
570
147
528
264
510
267
[root@m01 /server/files]# awk '{sum=0;for(i=2;i<=NF;i++) sum+=$i ;print sum/(NF-1) }' grade2.txt
95
73.5
88
88
85
66.75
[root@m01 /server/files]#
[root@m01 /server/files]# awk '{sum=0;for(i=2;i<=NF;i++) sum+=$i ;print $1,sum/(NF-1) }' grade2.txt
waiwai 95
xiaoyu 73.5
gege 88
xingxing 88
bingbing 85
dandan 66.75
awk '{
sum=0; #變量初始化 0
for(i=2;i<=NF;i++) #循環(huán)取出 第2列到最后一列
sum+=$i ;
print $1,sum/(NF-1) #循環(huán)完成,輸出結(jié)果 平均數(shù) sum/
}' grade2.txt