三劍客之awkd的基本使用

一、awk的使用html

1.1 基本的awk執行過程面試

#passwd文件的第二行的第一列和第二列正則表達式

 [root@xiaojin oldboy]# awk -F ":" 'NR==2{print $1,$2}' /etc/passwd數組

bin xpost

 

awk 參數  ‘模式{動做}’ 文件測試

awk 參數 ‘條件(找誰){幹啥}’ 文件url

 

1.2模式匹配:模式與動做server

   經過正則表達式做爲模式htm

模擬環境排序

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

##匹配xiaoyu的姓氏和ID號碼

[root@oldboyedu01-nb files]# awk '/Xiaoyu/' reg.txt

Zhang Xiaoyu    390320151  :155:90:201

[root@oldboyedu01-nb files]# awk '/Xiaoyu/{print $1,$2,$3}' reg.txt

Zhang Xiaoyu 390320151

###awk '第2列中包含Xiaoyu' reg.txt

[root@oldboyedu01-nb files]# awk '$2~/Xiaoyu/' reg.txt

Zhang Xiaoyu    390320151  :155:90:201

[root@oldboyedu01-nb files]# awk '$2~/Xiaoyu/{print $1,$2,$3}' reg.txt

Zhang Xiaoyu 390320151

###顯示全部以41開頭的ID號碼的人的全名和ID號碼

[root@oldboyedu01-nb files]# awk '$3~/^41/'  reg.txt

Zhang Dandan    41117397   :250:100:175

Liu   Bingbing  41117483   :250:100:175

[root@oldboyedu01-nb files]# awk '$3~/^41/{print $1,$2,$3}'  reg.txt

Zhang Dandan 41117397

Liu Bingbing 41117483

###顯示全部ID號碼最後一位數字是1或5的人的全名

[root@oldboyedu01-nb 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@oldboyedu01-nb files]# awk '$3~/[15]$/{print $1,$2}' reg.txt

Zhang Xiaoyu

Wu Waiwai

Wang Xiaoai

Li Youjiu

Lao Nanhai

###顯示Xiaoyu的捐款.每一個值時都有以$開頭.如$520$200$135

gsub(/目標/,"替換爲何",第幾列)

gsub(/目標/,"替換爲何") == gsub(/目標/,"替換爲何",$0)

[root@oldboyedu01-nb files]# awk '{gsub(/:/,"$",$4)}' reg.txt

[root@oldboyedu01-nb files]# awk '{gsub(/:/,"$",$4);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@oldboyedu01-nb files]# awk '$2~/Xiaoyu/' reg.txt

Zhang Xiaoyu    390320151  :155:90:201

[root@oldboyedu01-nb files]# awk '$2~/Xiaoyu/{gsub(/:/,"$");print}' reg.txt

Zhang Xiaoyu    390320151  $155$90$201

1.3 特殊模式BEGIN和END

 

BEGIN{} BEGIN裏面的內容,會在awk讀取文件內容以前運行。

用來計算、測試

 

END{}*** END{}裏面的內容,會在awk讀取完文件的最後一行以後運行。

用來顯示最終結果。

先計算,END顯示結果。

 

##統計/etc/services文件裏面的空行數量

root@oldboyedu01-nb files]# awk '/^$/{i=i+1}END{print i}' /etc/services

16

[root@oldboyedu01-nb files]# #        先計算END{顯示最終結果}

 

統計出現多少次 計數

i=i+1 == i++

 

 

 

 

 

 

1.4  awk的數組計算

處理如下文件內容,將域名取出並根據域名進行計數排序處理:(百度和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

 

[root@oldboyedu01-nb files]# cat url.txt

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

[root@oldboyedu01-nb files]# awk -F "[/.]+" '{print $2}' url.txt

www

www

post

mp3

www

post

[root@oldboyedu01-nb files]# awk -F "[/.]+" '{h[$2]=h[$2]+1;print h["www"]}' url.txt

1

2

2

2

3

3

 

[root@oldboyedu01-nb files]# awk -F "[/.]+" '{h[$2]=h[$2]+1}END{print h["www"],h["post"],h["mp3"]}' url.txt

3 2 1

[root@oldboyedu01-nb files]# awk -F "[/.]+" '{h[$2]=h[$2]+1}END{for(pol in h) print pol,h[pol]  }' url.txt

www 3

mp3 1

post 2

 

總結:

1.awk數組進行統計

i=i+1  == i++   統計次數 計數

i=i+$n == i+=$n 累計相加 累加

2.awk執行過程

3.awk經過正則做爲模式

4.BEGIN和END特殊模式

相關文章
相關標籤/搜索