没有合适的资源?快使用搜索试试~ 我知道了~
shell编程中经常出现的awk命令,结合详细的案例来阐述这个命令的使用。
资源推荐
资源详情
资源评论
AWK 简明教程
有一些网友看了前两天的《Linux 下应该知道的技巧》希望我能教教他们用 awk
和 sed,所以,出现了这篇文章。我估计这些 80 后的年轻朋友可能对 awk/sed 这
类上古神器有点陌生了,所以需要我这个老家伙来炒炒冷饭。况且,AWK 是贝尔
实验室 1977 年搞出来的文本出现神器,今年是蛇年,是 AWK 的本命年,而且年
纪和我相仿,所以非常有必要为他写篇文章。
之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和
Brian Kernighan 的 Family Name 的首字符。要学 AWK,就得提一提 AWK 的一
本相当经典的书《The AWK Programming Language》,它在豆瓣上的评分是
9.4 分!在亚马逊上居然卖 1022.30 元。
我在这里的教程并不想面面俱到,本文和我之前的 Go 语言简介一样,全是示例,
基本无废话。
我只想达到两个目的:
1)你可以在乘坐公交地铁上下班,或是在坐马桶拉大便时读完(保证是一泡大便
的工夫)。
2)我只想让这篇博文像一个火辣的脱衣舞女挑起你的兴趣,然后还要你自己去下
工夫去撸。
废话少说,我们开始脱吧(注:这里只是 topless)。
起步上台
我从 netstat 命令中提取了如下信息作为用例:
$ cat netstat.txt
Proto Recv-Q Send-Q Local-Address Foreign-Address
State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 coolshell.cn:80 124.205.5.146:18245
TIME_WAIT
tcp 0 0 coolshell.cn:80 61.140.101.185:37538
FIN_WAIT2
tcp 0 0 coolshell.cn:80 110.194.134.189:1032
ESTABLISHED
tcp 0 0 coolshell.cn:80 123.169.124.111:49809
ESTABLISHED
tcp 0 0 coolshell.cn:80 116.234.127.77:11502
FIN_WAIT2
tcp 0 0 coolshell.cn:80 123.169.124.111:49829
ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.215.36:36970
TIME_WAIT
tcp 0 4166 coolshell.cn:80 61.148.242.38:30901
ESTABLISHED
tcp 0 1 coolshell.cn:80 124.152.181.209:26825
FIN_WAIT1
tcp 0 0 coolshell.cn:80 110.194.134.189:4796
ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.212.163:51082
TIME_WAIT
tcp 0 1 coolshell.cn:80 208.115.113.92:50601
LAST_ACK
tcp 0 0 coolshell.cn:80 123.169.124.111:49840
ESTABLISHED
tcp 0 0 coolshell.cn:80 117.136.20.85:50025
FIN_WAIT2
tcp 0 0 :::22 :::* LISTEN
下面是最简单最常用的 awk 示例,其输出第 1 列和第 4 例,
其中单引号中的被大括号括着的就是 awk 的语句,注意,其只能被单引号包含。
其中的$1..$n 表示第几例。注:$0 表示整个行。
$ awk '{print $1, $4}' netstat.txt
Proto Local-Address
tcp 0.0.0.0:3306
tcp 0.0.0.0:80
tcp 127.0.0.1:9000
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp coolshell.cn:80
tcp :::22
我们再来看看 awk 的格式化输出,和 C 语言的 printf 没什么两样:
$ awk '{printf "%-8s %-8s %-8s %-18s %-22s %-15s\n",
$1,$2,$3,$4,$5,$6}' netstat.txt
Proto Recv-Q Send-Q Local-Address Foreign-Address
State
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 coolshell.cn:80 124.205.5.146:18245
TIME_WAIT
tcp 0 0 coolshell.cn:80 61.140.101.185:37538
FIN_WAIT2
tcp 0 0 coolshell.cn:80 110.194.134.189:1032
ESTABLISHED
tcp 0 0 coolshell.cn:80 123.169.124.111:49809
ESTABLISHED
tcp 0 0 coolshell.cn:80 116.234.127.77:11502
FIN_WAIT2
tcp 0 0 coolshell.cn:80 123.169.124.111:49829
ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.215.36:36970
TIME_WAIT
tcp 0 4166 coolshell.cn:80 61.148.242.38:30901
ESTABLISHED
tcp 0 1 coolshell.cn:80 124.152.181.209:26825
FIN_WAIT1
tcp 0 0 coolshell.cn:80 110.194.134.189:4796
ESTABLISHED
tcp 0 0 coolshell.cn:80 183.60.212.163:51082
TIME_WAIT
tcp 0 1 coolshell.cn:80 208.115.113.92:50601
LAST_ACK
tcp 0 0 coolshell.cn:80 123.169.124.111:49840
ESTABLISHED
tcp 0 0 coolshell.cn:80 117.136.20.85:50025
FIN_WAIT2
tcp 0 0 :::22 :::* LISTEN
脱掉外套
过滤记录
我们再来看看如何过滤记录(下面过滤条件为:第三列的值为 0 && 第 6 列的值为
LISTEN)
$ awk '$3==0 && $6=="LISTEN" ' netstat.txt
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
tcp 0 0 :::22 :::* LISTEN
其中的“==”为比较运算符。其他比较运算符:!=, >, <, >=, <=
我们来看看各种过滤记录的方式:
剩余15页未读,继续阅读
资源评论
sosoman007
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功