awk强大的文本&文件的处理语言

awk,一种处理文本文件的语言,强大的文本分析工具。取三位创始人Alfred Aho、Peter Weinberger和Brian Kernighan的Family Name的首字符

所属分类 Linux

相关标签 脚本Shell文本

awk

awk,一种处理文本文件的语言,强大的文本分析工具。

取三位创始人Alfred Aho、Peter Weinberger和Brian Kernighan的Family Name的首字符。

AWK命令非常强大,拥有很多Option参数,支持各类script命令,支持脚本文件引入与拓展,支持多种结构的写法。

与其说AWK命令,更像一种语言规范。

因此本文将不去详细描述各种Option的语法,也不会展示各种写法,为了避免混淆,毕竟大而全反而容易越学越乱。

常见用法

#输出文本管道截取,此处输出结果即123(通过逗号分割)
grep "123,122" | awk -F, '{print $1}'
#文件文本截取
#awk默认按空格或TAB分割
#将mebugs.log中的每行数据分割,并输出分割后的第一段[列]和第二段[列]数据
awk '{print $1,$2}' mebugs.log
#-F相当于内置变量FS, 指定分割字符
#将mebugs.log中的每行数据按逗号进行分割,并输出分割后的第一段[列]和第二段[列]数据
awk -F, '{print $1,$2}' mebugs.log

awk -F 可以指定多个以及正则表达式,作为分隔的条件字符串

涉及到特殊符号需要用'' (单引号) 进行包裹分隔条件字符串替换上文中逗号即可

如果不指定默认以TAB制表符和空格分割

相比较直接处理文本文件,管道方案在实际工作应用更为方便和方便

#默认以TAB制表符和空格分割
#定义a=1 b=so
#输出第一段[列]、第二段[列](1+a)、第一段[列]拼接变量b(com)的结果
#假设有一行日志 12-12 mebugs.com-POST
#本命令输出结果 12-12 mebugs.com-POST 12-12com
awk -va=1 -vb=com '{print $1,$1+a,$1b}' mebugs.log

-v 变量赋值,可以使结果具有更高的自定义效果,方便输出我们想要的结果,减少后续循环再操作的步骤

更多用法

下面这些应用会比较少,基本都是属于条件输出的范畴。

在实际的脚本编写过程中,多数我们会优先筛选出我们的数据然后进行处理。

#搜索出log中包含mebugsUser=的行,然后通过=截取,输出第二段[列]的数据(mebugsUser=的值)
#如:mebugsUser=NiuBi
#输出:NiuBi
grep "mebugsUser=" mebugs.log | awk -F'=' '{print $2}'
#过滤第一段[列]大于15的行,整行输出
awk '$1>15' mebugs.log
#过滤第一段[列]等于15的行,仅输出第一段[列]第三段[列]数据
awk '$1==15 {print $1,$3}' mebugs.log
#过滤第一段[列]大于15并且第二段[列]于'mebugs'的行,仅输出第一段[列]第二段[列]第二段[列]数据
awk '$1>15 && $2=="mebugs" {print $1,$2,$3}' mebugs.log
#输出mebugs.log中包含"mebugs"的行,整行输出
awk '/mebugs/' mebugs.log
#输出mebugs.log中第五段[列]包含 "mebugs",仅输出该行第二段[列]、第四段[列]数据
$ awk '$5 ~ /mebugs/ {print $2,$4}' mebugs.log

AWK脚本引入

awk -f {awk脚本} {文件名}

关于awk脚本,需要注意两个关键词BEGIN和END。

BEGIN {这里面放的是执行前的语句 }
END {这里面放的是处理完所有的行后要执行的语句}
{这里面放的是处理每一行时要执行的语句}

具体不进行深入讲解了,因为我也不怎么用,大写滑稽,小写尴尬,哈哈哈

米虫

做一个有理想的米虫,伪全栈程序猿,乐观主义者,坚信一切都是最好的安排!

本站由个人原创、收集或整理,如涉及侵权请联系删除

本站内容支持转发,希望贵方携带转载信息和原文链接

本站具有时效性,不提供有效、可用和准确等相关保证

本站不提供免费技术支持,暂不推荐您使用案例商业化

发表观点

提示

昵称

邮箱

QQ

网址

当前还没有观点发布,欢迎您留下足迹!

同类其他

Linux

通过ulimit命令解决Too many open files

项目启动报错:Too many open files,通过ulimit命令可以查看与管理用户/程序/进程占用资源情况,其中比较实用的是可以根据资源情况配置linux用户的最大进程数

Crontab配置定时任务处理日常工作

Linux服务器测试环境或正式生产环境常常设计一些定时例行处理的操作,如日记备份转移清理等,利用Crontab+Shell脚本组合实现定期定时操作,确保不会应工作繁忙忘记任务导致环境异常

多环境间信任关系添加的完整与快捷流程

项目上的开发和测试环境非常多,少则数十多则上百,实际工作中实在懒得来回登录或打开各个环境,最好的方案就是给内网环境间添加一下信任关系,便于快速在环境之间切换,免去输入密码的烦恼

Shell脚本循环逐行读取文件

Shell脚本循环读取文件常用的方案有输入重定向和管道操作,循环形式有while和for两种,具体的使用或搭配看个人习惯,个人尚未对命令进行性能验证

交互式脚本expect脚本实现自动化

expect脚本由一系列expect-send对组成,等待输出中输出特定的字符,通常是一个提示符,然后发送特定的响应,特别适用于需要批量手动输入命令的自动化操作改造

关键:Linux系统磁盘挂载

Linux系统一般情况下启动默认只加载系统盘,支持其他磁盘自由热插拔,如果发现自己的某些目录找不见了的时候不要慌看看是不是没有设置开机启动自动加载挂载磁盘内容,另外要特别注意首次安装系统记得磁盘挂载操作

选择个人头像

昵称

邮箱

QQ

网址

评论提示

  • 头像:系统为您提供了12个头像自由选择,初次打开随机为你选择一个
  • 邮箱:可选提交邮箱,该信息不会外泄,或将上线管理员回复邮件通知
  • 网址:可选提交网址,评论区该地址将以外链的形式展示在您的昵称上
  • 记忆:浏览器将记忆您已选择或填写过得信息,下次评论无需重复输入
  • 审核:提供一个和谐友善的评论环境,本站所有评论需要经过人工审核