前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AWK使用

AWK使用

作者头像
码缘
发布2022-09-21 10:48:28
6370
发布2022-09-21 10:48:28
举报
文章被收录于专栏:PHP修行之路

引子

代码语言:javascript
复制
 zcat hnmuseum_21070701.gz|awk -F'[: ]' '{size[$3":"$4]+=$11} END{for(time in size){print time,size[time]*1.1/1024/1024}}'|sort

命令组成分三个部分:BEGIN、BODY、END

  • BEGIN和END需要关键字进行声明,而且是命令中的可选部分,其在命令执行时之后执行一次
  • BODY部分不需要关键字声明,但是在命令执行时BODY部分会根据输入的行数而执行多次
代码语言:javascript
复制
awk 'BEGIN{printf "序号 名称 吉祥物 数值 \n"} {print} END{print "下一页"}' language.txt
代码语言:javascript
复制
1) PHP 大象 10
2) Golang 地鼠 20
3) MySql 海豚 30
代码语言:javascript
复制
序号    名称    吉祥物
1)    PHP       大象
2)    Golang    地鼠
3)    MySql     海豚

常见操作

  • -F 分割字符
代码语言:javascript
复制
awk -F ' ' '{print $2}' language.txt
代码语言:javascript
复制
awk -F ' ' '{sum += $4}END{print sum}' language.txt
  • 遍历数组
代码语言:javascript
复制
200 /api/get_info 127.0.0.1 20
300 /api/get_info 127.0.0.1 20
400 /api/get_user 127.0.0.1 20
500 /api/get_info 127.0.0.1 30
200 /api/get_info 127.0.0.1 20
200 /api/get_user 127.0.0.1 10
200 /api/get_info 127.0.0.1 20
200 /api/get_user 127.0.0.1 50
300 /api/get_info 127.0.0.1 20
200 /api/get_user 127.0.0.1 60
400 /api/get_user 127.0.0.1 20
200 /api/get_info 127.0.0.1 20
500 /api/get_info 127.0.0.1 70
200 /api/get_info 127.0.0.1 20
200 /api/get_list 127.0.0.1 50
300 /api/get_info 127.0.0.1 20
200 /api/get_list 127.0.0.1 20
400 /api/get_list 127.0.0.1 40
500 /api/get_info 127.0.0.1 20
200 /api/get_info 127.0.0.1 30
代码语言:javascript
复制
awk '{arr[$1] ++}END{for(item in arr) print item ":" arr[item]}' data.txt

注意事项

  • 获取整行内容时使用 $0
  • 支持数组但不支持二位数组

常见函数

sub 查找替换
代码语言:javascript
复制
awk '{sub("hello","sub");print $0}' str.txt
next 类似于continue
代码语言:javascript
复制
awk '{if($1 == "200") next;print $0}' data.txt

自定义函数

代码语言:javascript
复制
function find_min(num1, num2)
{
  if (num1 < num2)
    return num1
  return num2
}

function find_max(num1, num2)
{
  if (num1 > num2)
    return num1
  return num2
}

function main(num1, num2)
{
  # Find minimum number
  result = find_min(10, 20)
  print "Minimum =", result

  # Find maximum number
  result = find_max(10, 20)
  print "Maximum =", result
}

BEGIN {
  main(10, 20)
}
代码语言:javascript
复制
awk -f fun.awk

PHP和AWK对比

代码语言:javascript
复制
 cat language.txt |php -r '$fh=fopen("php://stdin","r");while(!feof($fh)){$text=fgets($fh);$arr=explode(" ",$text);echo $arr[2]."\n";}fclose($fh);'
代码语言:javascript
复制
 cat language.txt |awk '{print $3}'

参考地址:https://www.w3cschool.cn/awk/6d4t1k8l.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-08-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引子
  • 命令组成分三个部分:BEGIN、BODY、END
  • 常见操作
  • 注意事项
  • 常见函数
    • sub 查找替换
      • next 类似于continue
      • 自定义函数
      • PHP和AWK对比
      • 参考地址:https://www.w3cschool.cn/awk/6d4t1k8l.html
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档