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,ai}}' 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 ipi,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,ipi}}' /var/log/secure #统计安全日志中访问root账户且密码输入错误的ip地址与次数
相关推荐
寒水馨1 小时前
Linux下载、安装 Codex CLI(附安装包codex-x86_64-unknown-linux-musl.tar.gz)
linux·openai·终端·ai编程·codex·智能体·codex cli
其实防守也摸鱼1 小时前
KMP全栈开发:从Android到AI Agent的技术演进与实践
android·运维·网络·人工智能·学习·安全·macos
冰封之寂10 小时前
Docker 资源管理终极指南:CPU、内存与 IO 的精细化控制
linux·运维·服务器·docker·云计算
xiaoye-duck10 小时前
《Linux系统编程》Linux 系统多线程(五):<线程同步与互斥>线程互斥(上):从条件变量到生产者消费者模型详解
linux·线程
小柯南敲键盘11 小时前
图片翻译API接入与自动化实现指南
运维·python·自动化
云计算磊哥@11 小时前
运维开发宝典058-大型网站nginx服务器管理全集4
服务器·nginx·运维开发
9523612 小时前
Docker - 基础
运维·后端·docker·容器
Promise微笑12 小时前
智能激光清障仪选型指南:高效运维与安全保障的关键考量
运维·安全
Code_Ignis12 小时前
docker国内可用源(持续维护)
运维·docker·容器
一叶龙洲12 小时前
向日葵远程Ubuntu,支持隐私屏
linux·运维·ubuntu