当前位置: 首页 > news >正文

awk的应用

步骤一:awk的基本用法

1)基本操作方法

格式1:awk [选项] '[条件]{指令}' 文件

格式2:前置指令 | awk [选项] '[条件]{指令}'

其中,print 是最常用的编辑指令;若有多条编辑指令,可用分号分隔。

处理文本时,默认将空格、制表符作为分隔符。

条件可以用/ /的方式,与sed类似

awk常用内置变量:

$0 文本当前行的全部内容

$1 文本的第1列

$2 文件的第2列

$3 文件的第3列,依此类推

NR 文件当前行的行号

NF 文件当前行的列数(有几列)

  1. [root@svr5 ~]# cat abc.txt
  2. hello the world
  3. welcome to beijing
  4. awk '{print}' abc.txt                #输出所有
  5. awk '/to/{print}' abc.txt            #输出有to的那行
  6. awk '{print $2}' abc.txt            #输出所有行的第2列
  7. awk '/to/{print $1}' abc.txt        #输出有to的那行的第1列
  8. awk '{print $0}' abc.txt            #输出所有行所有列
  9. awk '{print $0,$1}' abc.txt        #输出所有行所有列,第1列
  10. awk '{print NR}' abc.txt            #输出所有行的行号
  11. awk '{print NR,$0}' abc.txt        #输出所有行的行号,所有列
  12. awk '{print NR,NF}' abc.txt        #输出所有行的行号,列号(有几列)

选项 -F 可指定分隔符

  1. awk -F: '{print $1}' user         #文档中如果没有空格,可以用F修改分隔符
  2. awk -F: '{print $1,$6}' user        #使用冒号作为列的分隔符,显示第1、6列

awk的print指令不仅可以打印变量,还可以打印常量

  1. awk -F: '{print $1" 的家目录是 "$6}' user #输出常量,加双引号即可

格式化输出信息

  1. awk [选项] '[条件]{指令}' 文件
  2. awk [选项] 'BEGIN{指令} {指令} END{指令}' 文件
  • BEGIN{ } 行前处理,读取文件内容前执行,指令执行1次
  • { } 逐行处理,读取文件过程中执行,指令执行n次
  • END{ } 行后处理,读取文件结束后执行,指令执行1次
  • awk -F: 'BEGIN{print "start"}{print $1}END{print "over"}' user
  • awk 'BEGIN{print NR}{print NR}END{print NR}' user

输出信息时,可以使用“\t”显示Tab制表位:

  1. awk -F: 'BEGIN{print "User\tUID\tHome"}{print $1"\t"$3"\t"$6}END{print "总计"NR"行"}' user #合在一起写

步骤一:认识awk处理条件的设置

使用正则设置条件

/正则/ ~ 包含 !~不包含

  1. awk -F: '$6~/root/{print}' user #输出第6列包含root的行
  2. awk -F: '$6~/bin/{print}' user #输出第6列包含bin的行
  3. awk -F: '$6!~/bin/{print}' user #输出第6列不包含bin的行

定义数组的格式:数组名[下标]=元素值

调用数组的格式:数组名[下标]awk 'BEGIN{a["abc"]="abcabc";a["xyz"]="xyzxyz";print a["xyz"]}'

 
  1. awk '{a[$1]++}END{for(i in a){print i,a[i]}}' shu.txt #使用逐行任务与数组收集文档shu.txt中的信息,然后在END任务中使用for循环显示所有数组a的下标与值

:统计Web访问量排名

通过awk提取信息时,利用IP地址作为数组下标,每遇到一个重复值就将此数组元素递增1,最终就获得了这个IP地址出现的次数。

针对文本排序输出可以采用sort命令,相关的常见选项为-r、-n、-k。其中-n表示按数字顺序升序排列,而-r表示反序,-k可以指定按第几个字段来排序

awk '{ip[$1]++}END{for(i in ip){print ip[i],i}}' /var/log/httpd/access_log | sort -nr

/var/log/secure是安全日志,如果有人登陆时输入错误密码的话信息会记录下来,这种信息可以用awk抓取出来,方法如下:

  1. awk '/Failed password for root/{ip[$11]++}END{for(i in ip){print i,ip[i]}}' /var/log/secure #统计安全日志中访问root账户且密码输入错误的ip地址与次数
http://www.lryc.cn/news/361986.html

相关文章:

  • 【网络原理】HTTP|认识请求“报头“|Host|Content-Length|Content-Type|UA|Referer|Cookie
  • 深入React Hoooks:从基础到自定义 Hooks
  • 9.7 Go语言入门(映射 Map)
  • 过期视频怎么恢复?如何从手机、电脑和其他设备中恢复?
  • LeetCode刷题第2题
  • mysql执行拼接的sql语句
  • 使用 pm2 或 screen 等工具来管理和后台运行你的 Node.js 应用
  • leetcode4 寻找两个正序数组的中位数
  • 水库大坝安全监测系统建设方案
  • 单片机的内存映射和重映射
  • 详解和实现数据表格中的行数据合并功能
  • 深度学习-05-反向传播理论知识
  • 黑马程序员——Spring框架——day04——SpringMVC基础
  • SpaceX间接「颠覆」了手机?星链如何直连手机通信?
  • 初识C++ · 模拟实现stack和Queue
  • MFC工控项目实例之一主菜单制作
  • JVMの堆、栈内存存储
  • 二叉树—堆(C语言实现)
  • 儿童有声挂图的芯片AD156—云信通讯
  • AI推介-多模态视觉语言模型VLMs论文速览(arXiv方向):2024.04.25-2024.05.01
  • gdb调试常见指令
  • 二进制安装mysql8.1
  • 前端工程化工具系列(六)—— VS Code(v1.89.1):强大的代码编辑器
  • 重学java 59.Properties属性集集合嵌套集合下总结
  • Kafka系列之高频面试题
  • SIP通话分析
  • 【SVG 生成系列论文(九)】如何通过文本生成 svg logo?IconShop 模型推理代码详解
  • 有哪些兼职软件一天能赚几十元?盘点十个能长期做下去的挣钱软件
  • ubuntu 22.04配置静态ip
  • C++ 使用 nlohmann/json 库