四劍客-awk

awk執(zhí)行過(guò)程
awk取行
awk取列
awk過(guò)濾(模式與動(dòng)作)
awk數(shù)組
awk判斷
awk循環(huán)

.1 awk概述

awk 語(yǔ)言 單行腳本
gnu awk gawk
image.png
[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 行與列

image.png
1) 取行
image.png
###案例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
image.png
#案例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) 綜合 取行與取列
image.png
#案例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ì)算
image.png

image.png
2) BEGIN
image.png
案列
#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{}
image.png
#案例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ù)組批量取值
image.png
案列
[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 
image.png

5 .awk if

image.png
# 單分支判斷
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
image.png
#案例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 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖恨统,帶你破解...
    沈念sama閱讀 206,482評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異三妈,居然都是意外死亡畜埋,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)畴蒲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)悠鞍,“玉大人,你說(shuō)我怎么就攤上這事模燥】Ъ溃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,762評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵蔫骂,是天一觀的道長(zhǎng)么翰。 經(jīng)常有香客問(wèn)我,道長(zhǎng)辽旋,這世上最難降的妖魔是什么浩嫌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,273評(píng)論 1 279
  • 正文 為了忘掉前任檐迟,我火速辦了婚禮,結(jié)果婚禮上码耐,老公的妹妹穿的比我還像新娘追迟。我一直安慰自己,他們只是感情好骚腥,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,289評(píng)論 5 373
  • 文/花漫 我一把揭開(kāi)白布敦间。 她就那樣靜靜地躺著,像睡著了一般束铭。 火紅的嫁衣襯著肌膚如雪每瞒。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,046評(píng)論 1 285
  • 那天纯露,我揣著相機(jī)與錄音,去河邊找鬼代芜。 笑死埠褪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的挤庇。 我是一名探鬼主播钞速,決...
    沈念sama閱讀 38,351評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼嫡秕!你這毒婦竟也來(lái)了渴语?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,988評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤昆咽,失蹤者是張志新(化名)和其女友劉穎驾凶,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體掷酗,經(jīng)...
    沈念sama閱讀 43,476評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡调违,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,948評(píng)論 2 324
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泻轰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片技肩。...
    茶點(diǎn)故事閱讀 38,064評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖浮声,靈堂內(nèi)的尸體忽然破棺而出虚婿,到底是詐尸還是另有隱情,我是刑警寧澤泳挥,帶...
    沈念sama閱讀 33,712評(píng)論 4 323
  • 正文 年R本政府宣布然痊,位于F島的核電站,受9級(jí)特大地震影響羡洁,放射性物質(zhì)發(fā)生泄漏玷过。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,261評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辛蚊。 院中可真熱鬧粤蝎,春花似錦、人聲如沸袋马。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,264評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)虑凛。三九已至碑宴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間桑谍,已是汗流浹背延柠。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,486評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锣披,地道東北人贞间。 一個(gè)月前我還...
    沈念sama閱讀 45,511評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像雹仿,于是被迫代替她去往敵國(guó)和親增热。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,802評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容