linux 之awk
简介
awk是一个强大的文本分析工具,相对grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格
为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk有3个不同版本:awk、nawk和gawk,未作特别说明,一般gawk,gawk是awk的GNU版本。
awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上awk的确拥有自己的语言:awk程序设计,三位
创建者已将它正式定义为“样式扫描和处理语言”。它允许创建简短的程序,这些程序读取输入文件、为数据读取输入文件、为数据排序、处理数据,对输入执行
计算以及生成报表,还有无数其他的功能。
调用awk
有三种方式调用awk
1、命令行方式
awk [-F 字段分隔符] 'commands' input-file(s)
其中,commands是真正awk命令,[-F域分隔符]是可选的,input-file(s)是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指明-F域分隔符的情况下爱,默认的域分隔符是空格。
2、shell脚本方式
将所有的awk命令插入一个文件,并使用awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行:#!/bin/bash
可以换成:#!/bin/awk
3、将所有的awk命令插入一个单独文件,然后调用:
awk -f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,
$0则表示所有域,$1表示第二个域,$n表示第n个域。默认域分隔符是“空白键”或者“[tab]键”。
例子:
①、如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以tab键分割
awk -F ':' '{print $1"\t"$7}' /etc/passwd
②、如果只是显示/etc/passwd的账户和账户对应的shell,而账户与shell之间以逗号分割,而且在所有行添加列明name,shell,在最后一行添加“blue,/bin/nosh”。
awk -F ':' 'BEGIN {print "name,shell"} {print $1","$7} END {print "blue,/bin/nosh"}' /etc/passwd
awk工作流程是这样的:先执行BEGIN,然后读取文件,读入有/n换行符分割的一条记录,然后将记录按照指定的域分隔符划分域,填充域,$0则表示所有域,
$1表示第一个域,$n表示第n个域,随后开始执行模式所对应的动作action。
接着开始读入第二条记录......直到所有的记录都读完。最后执行END操作。
搜索/etc/passwd有root关键字的所有行
awk -F ':' '/root/' /etc/passwd
这种是pattern的使用示例,匹配了pattern(这里是root)的行才会执行action(没有指定action,默认输出每行的内容)。
搜索支持正则,例如找root开头的:awk -F '/^root/' /etc/passwd
最新文章
- TCP服务和首部知识点小结
- 学习EF之贪懒加载和延迟加载(2)
- 纪念BLives 1.0版本发布
- paintEvent(QPaintEvent*)是系统自动调用的
- Discuz! x3.1 /utility/convert/index.php Code Execution Vul
- 如何写出让hr一看就约你面试的简历?
- mysql 关于日期时间的字段类型
- Duilib中系统消息在自己窗口类的使用
- mysql 常用sql操作语句
- JSP中Session的使用
- qq互联(connect.qq.com)取用户信息的方法
- 高吞吐高并发Java NIO服务的架构(NIO架构及应用之一)
- 1.2 Coin 项目
- ACM经典算法之字符串处理:字符串替换
- 使用 RxJS 实现一个简易的仿 Elm 架构应用
- [Luogu 1122] 最大子树和
- 错误问题:OpenGL version to old,GLViewinitWithRect(const stdbasic_stringchar,stdchar_traitschar,stdalloca
- 好程序员web前端开发测验之css部分
- WEB前端移动开发初始化
- MySQL全文本搜索
热门文章
- mac 安装memcached以及启动memcached
- 基于vue-cli项目添加服务端渲染
- FFmpeg: AVPacket 结构体分析
- 【GMT43智能液晶模块】例程二:串口通信实验
- [NM]打开NetworkManager和wpa_supplicant的DEBUG接口
- MAC OS查看端口占用情况及杀死进程
- 解决Xcode删除文件后missing file警告
- Ubuntu 14.04 下搭建SVN服务器 (转载自 http://www.linuxidc.com/Linux/2015-01/111956.htm)-------------我所用到是红色字体
- “failed to excute script xxx” PyInstaller 打包python程序为exe文件过程错误
- feign调用接口session丢失解决方案