文章目录
- 9.1 只处理用户ID为奇数的行,并打印用户名和uid号
- 9.2 显示系统的普通用户,并打印用户名和ID
- 9.3 显示用户shell是'/bin/bash'的用户,并打印用户名
- 9.4 统计普通用户的个数
- 9.5 统计文本的总行数
- 9.6 显示文件名
- 9.7 显示UID为1000用户的相关信息
- 9.8 利用awk模拟tail -1的效果
- 9.9 统计tcp链接数
- 9.10 将test2文件中的行追加到test1的同一行后,并保存到文件test3
- 9.11 某产品的CDN带宽运营成本迅猛增涨,其带宽主要由各种类型的图片组成,为了对某产品的图片流量带宽进行优化,现需要对该产品的图片和号码特性做一些分析,已有的日志文件test.log供分析使用,
9.1 只处理用户ID为奇数的行,并打印用户名和uid号
[root@localhost ~]#awk -F":" '$3%2==1{print $1,$3}' /etc/passwd
处理奇数的行
[root@localhost ~]#awk -F":" 'NR%2==1{print $1,$3}' /etc/passwd
9.2 显示系统的普通用户,并打印用户名和ID
[root@localhost ~]#awk -F":" '$3>1000{print $1,$3}' /etc/passwd
9.3 显示用户shell是’/bin/bash’的用户,并打印用户名
[root@localhost ~]#awk -F":" '$NF=="/bin/bash"{print $1}' /etc/passwd
9.4 统计普通用户的个数
[root@localhost ~]#awk -F":" '$3>1000{++a}END{print a}' /etc/passwd
22
[root@localhost ~]#awk -F":" '$3>1000' /etc/passwd | wc -l
22
9.5 统计文本的总行数
[root@localhost ~]#awk -F: 'END{print NR}' /etc/passwd
68
[root@localhost ~]#cat /etc/passwd | wc -l
68
9.6 显示文件名
[root@localhost ~]#awk 'END{print FILENAME}' /etc/passwd
/etc/passwd
9.7 显示UID为1000用户的相关信息
[root@localhost ~]#awk -F":" '$3==1000{print $0}' /etc/passwd
roo:x:1000:1000:root:/home/roo:/bin/bash
9.8 利用awk模拟tail -1的效果
[root@localhost ~]#awk 'END{print $0}' /etc/passwd
redis:x:986:979:Redis Database Server:/var/lib/redis:/sbin/nologin
[root@localhost ~]#tail -1 /etc/passwd
redis:x:986:979:Redis Database Server:/var/lib/redis:/sbin/nologin
9.9 统计tcp链接数
[root@localhost ~]#netstat -ant | awk '/^tcp/{++a[$NF]}END{for (i in a)print i":" a[i]}'
LISTEN:10
ESTABLISHED:1
9.10 将test2文件中的行追加到test1的同一行后,并保存到文件test3
- test1
haha
hehe
alice
bob
- test2
20
25
18
30
- test3
haha:20
hehe:25
alice:18
bob:30
答案
[root@localhost ~]#awk '{printf $0;getline<"test2";print":" $0}' test1
[root@localhost ~]#awk 'BEGIN{FS=OFS=" "}NR==FNR{a[++m]=$1}NR>FNR{print $0,a}' test2 test1
9.11 某产品的CDN带宽运营成本迅猛增涨,其带宽主要由各种类型的图片组成,为了对某产品的图片流量带宽进行优化,现需要对该产品的图片和号码特性做一些分析,已有的日志文件test.log供分析使用,
格式是
号码|请求大小|请求id,内容如下:
----------------------------------
001|100|abc.gif
002|80|abd.jpg
003|150|abe.gif
001|60|abf.gif
003|30|abg.jpg
-----------------------------------
其中带有gif表示是gif图片的请求,带有jpg表示是jpg图片的请求,请使用(python/shell/awk/sort)编写程序实现如下分析思路(1,2为中间步骤,可以只输出3,4结果):
1.找出所有gif图片请求的所有号码
2.找出所有gif图片请求的号码和其对应的请求大小总和及请求数总和.
3.找出所有gif图片请求的号码,并按照其请求大小总和从大到小排序.
4.找出所有gif图片请求的号码,并按其请求平均图片大小从大到小排序.
1.找出所有gif图片请求的所有号码
[root@localhost ~]#awk -F"|" '/gif$/{print $1 | "sort -u"}' test.log
2.找出所有gif图片请求的号码和其对应的请求大小总和及请求数总和.
[root@localhost ~]#awk -F"|" '/gif$/{++req[$1];size[$1]+=$2}END{for(i in size) {print i ":" req[i],size[i]}}' test.log
3.找出所有gif图片请求的号码,并按照其请求大小总和从大到小排序.
[root@localhost ~]#awk -F"|" '/gif$/{++req[$1];size[$1]+=$2}END{for(i in size) {print i":",req[i],size[i] | "sort -k3 -nr"}}' test.log
4.找出所有gif图片请求的号码,并按其请求平均图片大小从大到小排序.
[root@localhost ~]#awk -F"|" '/gif$/{++req[$1];size[$1]+=$2}END{for(i in size) {print i":",req[i],size[i]/req[i] | "sort -k3 -nr"}}' test.log