网站首页 > 技术文章 正文
Linux三剑客awk命令篇一:原理及基本命令
1、简单介绍:
awk是一个文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一。
awk经过改进生成的新的版本nawk、gawk,现在默认linux系统下日常使用的是gawk。
用命令可以查看正在应用的awk的来源(ls -l /bin/awk)。
如下图:
awk提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。简单来说,awk在很多方面类似于shell编程语言。
总结:
awk不仅仅时linux系统中的一个命令,而且是一种编程语言,可以用来处理数据和生成报告(excel)。处理的数据可以是一个或多个文件,可以是来自标准输入,也可以通过管道获取标准输入,awk可以在命令行上直接编辑命令进行操作,也可以编写成awk程序来进行更为复杂的运用。
2、 执行流程:
与sed命令相似均是一行行读取、处理.......
这里对比sed命令来分析。
sed如下图:
sed是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行...
当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。
不同之处:
awk会将一行分成数个字段来处理,并非像sed是一整行来处理。
示意图:
补充:
上图的默认分割符空白,即:空格或者tab。
3、 语法格式:、
(1) Awk完整语法
awk 'BEGIN{commands} pattern{commands}END{commands} ' file
BEGIN{commands}:
处理数据前执行的命令。
END{commands}:
处理完数据后执行的命令。
这两个命令可以省略。见(2)
(2) Awk基本语法
awk -F '分割符' '/模式/{动作} ' file
这里的'/模式/{动作} '是不是有点类似于sed的命令格式。
注意:
1、 指令使用''
2、 动作使用{}
3、 模式:
(1) 正则表达式(注意格式:/正则表达式/)
(2) 条件表达式(例如:> <等等)
总结:
这里的模式通俗来讲是用来找谁,而动作表示是干啥。
例如:一共3个橘子、两个柚子、壹个葡萄。
假设你现在想吃葡萄。
模式可以表示/葡萄/,动作表示{eat}。
4、 案例1
cat demo.txt
juzi juzi juzi youzi youzi putao
awk 'BEGIN{print "start find putao..."} /putao/{print "eat it"} END{print "end I get it..."}' demo.txt
//执行的BEGIN命令
start find putao...
//匹配到模式的行执行的动作
eat it
//执行的END命令
end I get it...
案例2:
下面我们来取该文件的第一个字段和最后一个字段
1、//只有动作没有模式
awk -F ':' '{print $1,$7}' /etc/passwd
补充:
//下期介绍了内部变量后可以使用如下方式
awk -F ':' '{print $1,$NF}' /etc/passwd
2、 获取特定用户的登录shell
//即有模式也有动作
odysee:~/shellFiles_1$awk -F ':' '/^odysee/{print $1,$7}' /etc/passwd
odysee1 /bin/bash
odysee /bin/bash
以odysee为例
3、 只有模式
awk -F ':' '/^odysee/' /etc/passwd
这里就和grep相似,显示$0正行数据。
下一篇:
Linux三剑客awk命令篇二之命令操作符
欢迎大家给予宝贵的意见或者建议。
欢迎大家补充或者共享一些其他的方法。
感谢支持。
猜你喜欢
- 2024-11-04 /etc/passwd格式说明(etcpasswd 详解)
- 2024-11-04 centos7关闭防火墙firewalld 绝对不能在服务器上执行命令
- 2024-11-04 Linux系统搭建NFS网络文件系统,实现文件共享
- 2024-11-04 Linux上使用tinyproxy快速搭建HTTP/HTTPS代理器
- 2024-11-04 「神马课堂」Linux操作系统中主DNS服务器的配置(基于CentOS 7)
- 2024-11-04 Linux命令笔记-01(linux命令教程)
- 2024-11-04 Linux更改ssh端口的详细教程(提升系统安全)
- 2024-11-04 如何加固Linux系统?8种操作示例(linux主机加固)
- 2024-11-04 如何解决 Open /etc/postfix/main.cf: Permission denied ?
- 2024-11-04 Linux服务管理之Systemd配置详解,呕心沥血,匠心之作
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)