Linux常用命令 -- awk

基本格式:awk ‘BEGIN{ print “start” } pattern{ commands } END{ print “end” }’ file


工作原理
  • 第一步:执行BEGIN{ commands }语句块中的语句;
  • 第二步:从文件或标准输入(stdin)读取一行,然后执行pattern{ commands }语句块,它逐行扫描文件,从第一行到最后一行重复这个过程,直到文件全部被读取完毕。
  • 第三步:当读至输入流末尾时,执行END{ commands }语句块。

  BEGIN语句块在awk开始从输入流中读取行之前被执行,这是一个可选的语句块,比如变量初始化、打印输出表格的表头等语句通常可以写在BEGIN语句块中。
  END语句块在awk从输入流中读取完所有的行之后即被执行,比如打印所有行的分析结果这类信息汇总都是在END语句块中完成,它也是一个可选语句块。
  pattern语句块中的通用命令是最重要的部分,它也是可选的。如果没有提供pattern语句块,则默认执行{ print },即打印每一个读取到的行,awk读取的每一行都会执行该语句块。

1、统计文件行数
awk 'END{ print NR}' [filename]

awk常用内置变量:
NR:表示记录数,在执行过程中对应于当前的行号
NF:表示字段数,在执行过程中对应于当前的字段数
nnn1n2 n 当 前 记 录 的 第 n 个 字 段 , 比 如 n 为 1 表 示 第 一 个 字 段 , n 为 2 表 示 第 二 个 字 段 ( 字 段 以 空 格 为 分 隔 符 ) 0 这个变量包含执行过程中当前行的文本内容。

2、统计日志中访问量前十IP
awk '{print $1}' [filename] | sort | uniq -c | sort -nr -t " " -k1,1 | head -10

uniq -c:去重并统计次数(用uniq命令可以删除相邻的重复行,但如果一文本中有重复却不相邻的行则无法删除,需要结合sort命令,先排序再去重,就是第一个sort命令的作用)
sort -nr -k1:按第一栏根据数字大小倒序排序,分隔符为空格
head -10:取前十条

3、批量杀掉被占用的端口的JAVA进程
# 较常用的写法
lsof -i tcp:[被占用的端口号] | grep java | awk '{print $2}' | xargs kill -9

# 另一种写法
lsof -i tcp:[被占用的端口号] | grep java | awk '{print "kill -9 "$2}' | sh
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值