AWK 简单使用

编辑人:AK

引用(张星宇发布的 “2018 年将至,iOS 工程师如何自我提高” )脚本语言非常重要,绝对是提升工作效率的神器,我强烈建议每个客户端工程师都应该了解一些 Shell 脚本并且掌握 Python,Ruby 和 JS 中至少一门语言。

理论上来说没有什么是脚本语言做得到,Java 做不到的,但脚本语言最大的特点就是快,快到极点的那种快。对于一些极度简单的小需求,比如统计一个文件中某一列数字的平均数,我敢保证在我得出结果之前你肯定还来不及打开 Java 编辑器。

脚本语言的另一个特点是高度的自动化,只要 Unix 和 Linux 系统一天不死,shell 脚本就会永远存活,你学习的知识就永远不会过期,比如 awk 和 sed 这样的神器,年龄比我大得多,至今还非常实用,未来的 20 年也丝毫看不出淘汰的迹象。试问一下,有什么知识能比一个几十年不会过期,而且每天都能用上的知识更值得学习呢?由于 Shell 是距离操作系统最近的脚本,了解了它以后,很多复杂的操作都可以被自动化。比如想找到项目中无用的图片,也就是一行命令的事

awk内建变量

变量说明
$0当前记录(这个变量中存放着整个行的内容)
1   1~ 1 n当前记录的第n个字段,字段间由FS分隔
FS输入字段分隔符 默认是空格或Tab
NF当前记录中的字段个数,就是有多少列
NR已经读出的记录数,就是行号,从1开始,如果有多个文件话,这个值也是不断累加中。
FNR当前记录数,与NR不同的是,这个值会是各个文件自己的行号
RS输入的记录分隔符, 默认为换行符
OFS输出字段分隔符, 默认也是空格
ORS输出的记录分隔符,默认为换行符
FILENAME当前输入文件的名字

一,简单使用

我都是以 nestat.txt 为例子

Proto Recv-Q Send-Q  Local Address          Foreign Address        (state)
tcp4       0      0  192.168.16.130.55429   ec2-52-193-9-121.https ESTABLISHED
tcp4       0      0  192.168.16.130.55426   42.120.17.16.https     ESTABLISHED
tcp6       0      0  im-aks-brother-2.55421 iphonex.49596          ESTABLISHED
tcp6       0      0  im-aks-brother-2.55414 iphonex.49578          ESTABLISHED
tcp6       0      0  im-aks-brother-2.55410 iphonex.49568          ESTABLISHED
tcp4       0      0  192.168.16.130.55401   ec2-34-203-25-67.https ESTABLISHED
tcp4       0      0  192.168.16.130.55399   153.35.132.52.http     ESTABLISHED
tcp6       0      0  im-aks-brother-2.55361 fe80::10c0:5b06:.63596 ESTABLISHED
tcp6       0      0  im-aks-brother-2.55359 fe80::10c0:5b06:.63591 FIN_WAIT_2
tcp6       0      0  im-aks-brother-2.55354 fe80::10c0:5b06:.63584 ESTABLISHED
1,输出指定列 (第一列)
awk '{print $1}' netstat.txt
2,替换字符串,把文件中的ESTABLISHED 替换成"听"
awk 'gsub(/ESTABLISHED/,"听"); print "\n",$1,$2,$3,$4,$5,$6} ' netstat.txt
3,过滤 state 为FIN_WAIT_2的数据 其中的“==”为比较运算符。其他比较运算符:!=, >, <, >=, <=
awk '$6=="FIN_WAIT_2"' netstat.txt

二, 实用例子

1, 批量关闭打开的iTerm2应用
 ps |grep iTerm2 | grep -v grep| awk '{print $1}' | xargs kill -9
2, 关闭指定端口的服务器 以 swift 服务为例子端口 8181
lsof -nP -iTCP:8181 |grep LISTEN|awk '{print $2}'|kill -9
其它

有一些记不住的地方可以去 google 查找,最主要的其实是什么时候,什么问题使用 awk 这才是要锻炼的思维方式.

参考资料

AWK 实战指南

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值