优秀的编程知识分享平台

网站首页 > 技术文章 正文

Linux三剑客awk命令的原理及基本命令讲解

nanyue 2024-11-04 13:08:07 技术文章 4 ℃

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命令篇二之命令操作符

欢迎大家给予宝贵的意见或者建议。

欢迎大家补充或者共享一些其他的方法。

感谢支持。

Tags:

最近发表
标签列表