awk样例

awk可以算一种单独的语言了,太深奥,我只知一点皮毛,就写一点平时经常用到的.

awk基本语法格式:
awk [选项] ‘模式{动作}’ file

awk的默认分隔符为空格
-F “:” 指定:为分隔符
-F “[,;]” 指定多分隔符, ,;都算分隔符
-F “[ ;]+” 指定多分隔符,写上+号表示,多个空格或;也表示一个分隔符
$NF 为最后一列
$(NF-1) 倒数第二列
$0 整行内容
NR代表行号

例:
1 取出指定行号
awk ‘{if (NR>10 && NR<12) print $1 }’ /etc/passwd
operator❌11:0:operator:/root:/sbin/nologin

awk ‘NR==11 {print $1 }’ /etc/passwd
operator❌11:0:operator:/root:/sbin/nologin

2 打印指定列
打印倒数第二列
awk -F “:” ‘{print $(NF-1)}’ /etc/passwd

3 提取ip地址
[root@tom01 ~]# ifconfig|awk -F “[ :]+” ‘NR==2 {print $4}’
192.168.56.7

4 打印文件中行号以及内容
awk ‘{print NR "\t " $0}’ /etc/passwd

5 提取文件test.txt(I am tom my qq xxxxxx)中的名字和qq号
[root@tom01 ~]# awk ‘{print $3 " " $6}’ test.txt
tom xxxxxx

提取文件test.txt(I am tom,my qq xxxxxx)中的名字和qq号
[root@tom01 ~]# awk -F “[ ,]” ‘{print $3 " " $6}’ test.txt
tom xxxxxx

6 /etc/passwd文件有多少行
awk ‘{print NR}’ /etc/passwd |tail -1

7 不显示文件中的空白行
awk /[^$]/ README.txt

8 处理以下文件内容,将域名取出并根据域名进行计数排序处理:
http://www.baidu.org/index.htmL
http://www.baidu.org/1.html
http://post.baidu.org/index.html
http://mp3.baidu.org/index.html
http://www.baidu.org/3.html
http://post.baidu.org/2.html

方法1
[root@tom01 ~]# awk -F “/” ‘{print $3}’ test.txt |sort|uniq -c|sort -r
3 www.baidu.org
2 post.baidu.org
1 mp3.baidu.org
方法2
[root@tom01 ~]# awk -F “/” ‘{S[$3]++}END{for(n in S) print S[n],n}’ test.txt |sort -rn
3 www.baidu.org
2 post.baidu.org
1 mp3.baidu.org

9 统计web日志单ip访问请求排名,取出前十名
方法1
[root@tom01 ~]# awk ‘{print $1}’ access_bbs.log |sort|uniq -c|sort -rn |head
702 119.61.26.106
525 36.110.58.98
107 120.52.18.55
92 120.52.18.59
92 120.52.18.58
89 120.52.18.60
81 120.52.18.57
75 120.52.18.48
61 106.121.62.181
57 120.52.18.47
方法2
[root@tom01 ~]# awk ‘{S[$1]++}END{for (n in S) print S[n],n}’ access_bbs.log |sort -rn|head
702 119.61.26.106
525 36.110.58.98
107 120.52.18.55
92 120.52.18.59
92 120.52.18.58
89 120.52.18.60
81 120.52.18.57
75 120.52.18.48
61 106.121.62.181
57 120.52.18.47

10 服务器不同网络连接状态对应的数量
方法1
[root@VM_16_7_centos ~]# netstat -ant|awk ‘/^tcp/ {print $NF}’|sort|uniq -c|sort -rn
24 ESTABLISHED
11 LISTEN
5 CLOSE_WAIT
1 TIME_WAIT
方法2

[root@VM_16_7_centos ~]# netstat -ant|awk '/^tcp/ {S[$NF]++}END{for(n in S) print S[n],n}'|sort -rn

25 ESTABLISHED
11 LISTEN
5 CLOSE_WAIT
方法3
[root@VM_16_7_centos ~]# ss -ant|awk ‘NR>1 {print $1}’ | sort |uniq -c|sort -rn
24 ESTAB
11 LISTEN
5 CLOSE-WAIT

11 分析图片服务日志.把日志(每个圈片访问次致.图片大小的总和)排行,取top10
awk ‘{print $7 " " $10}’ access_bbs.log |sort|uniq -c|awk ‘{print $1*$3 " " $2 " " $1 }’|sort -rn|head
3103955 / 43
2292724 /index.php?m=Home&c=Cart&a=header_cart_list 28
1882987 /index.php?m=Home&c=Cart&a=header_cart_list 23
1743528 /static/home/images/global.png 4
1055582 /static/home/js/jquery-1.11.3.min.js 11
881750 /uploads/Carousel/20171207/20171207101806691.jpg 5
862110 /static/home/js/jquery.min.js 9
818900 /index.php?m=Home&c=Cart&a=header_cart_list 10
739840 / 64
671980 /uploads/Carousel/20171013/20171013144425854.jpg 4

12 将/etc/passwd文件的所有列反转
awk -F “:” ‘{print $7":"$6":"$5":"$4":"$3":"$2":"$1}’ /etc/passwd

13 匹配第三列中以61开头的信息 然后输出源文件中整行信息中的第一列 第二列
awk ‘$3~/^61/ {print $1,$2}’ awk.txt

14 awk替换动作
gsub
动作格式
gsub(/需要替换的信息/,“修改成什么信息”,将那列信息修改)
修改最后一列,把:修改为$

awk '{gsub(/:/,"$",$NF);print $1,$3}'

15 BEGIN 在执行命令之前进行的操作
在操作之前向首行添加信息,BEGIN
awk ‘BEGIN{print “UUID”,“挂载点”,“分区格式”,“挂载参数”}{print $0}’ fstab|column -t

注:column -t是对齐文件命令

16 END 在执行命令之后进行的操作
统计passwd文件中最后一列nologin出现的次数

awk -F ":" '$NF~/nologin/{i++}END{print i}' /etc/passwd

awk -F ":" '$NF~/nologin/{i=i+1}END{print i}' /etc/passwd

17 求和运算
seq 10 |awk -F “:” ‘{sum=sum+$1;print sum}’
sum是一个变量可以随意定义

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值