三剑客之awkd的基本使用

1、awk的使用

1.1 基本的awk执行过程

#passwd文件的第二行的第一列和第二列

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

bin x

awk 参数 ‘模式{动作}’ 文件

awk 参数 ‘条件(找谁){干啥}’ 文件

1.2模式匹配:模式与动作

通过正则表达式作为模式

模拟环境

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特殊模式

转载于:https://blog.51cto.com/11954869/2340537

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值