格式处理器--AWK

简介:

grep、sed、awk为三个主流的文本处理器,但是在处理上各有优缺点。这里我们只介绍awk

AWK是一种优良的文本处理工具。它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个人所拥有的知识。AWK 提供了极其强大的功能:可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。它具备了一个完整的语言所应具有的几乎所有精美特性。实际上 AWK 的确拥有自己的语言:AWK 程序设计语言, 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

一、基本语法

awk [options] ‘program’ file  file ..

awk [options]   ‘PATTERN{action}’ file   file…

输出格式:print item1,item2。。。

(1)各项之间用逗号分割,实现出来有空格;若用空格显示出来则无空格

(2)输出的各项可以字符串,当前记录字段,变量或awk的表达式;数值会被隐式转换为字符串后输出

(3)如果后面的print后面的item省略,相当于print $0:输出全部

===============================================================

二、awk的变量

主要分为内置变量和自定义变量

(1)内置变量

FS:Filed Seperator 输入时的字段分割fu
RS: 输入行分割符
OFS 输出时的字段分割符
ORS 输出时的行分割符
NF 字段数
NR 行数,所有文件一并计数
FNR 行数,各文件分别计数
ARGV 数组保存命令本身的字符
ARGC 保存awk命令参数的个数
FILENAME awk正在处理的当前文件的名称

下面举例显示一下区别:

(a)使用不同的分割

(b)对文件行数计数

(c)对各文件分别计数

(d)使用数组保存命令本事的字符

(e)保存命令参数的个数

(f)显示awk当前正在处理的文件系统的名称

===============================================================

(2)自定义变量

-v   var_name=VALUE        //变量名区分字符大小写

a.可以在program中定义

b.可以在命令行通过-v选项自定义

三、awk的printf用法

使用格式:printf  format, item1, item2….

要指定format

不会自动换行,换行需要使用\n

format用于为后面的每个item指定其输出格式

(1)format的格式的指示符以%开头,后面跟一个字符

%c 显示字符的ASCII码
%d,%i 十进制整数
%e 科学计数法显示数值
%f 显示浮点数
%g 以科学计数法格式或浮点数格式显示数值
%s 显示字符串
%u 显示无符号整数
%% 显示%自身

将字符转换为ASCII码

打印为十进制

讲某数转换为科学计数格式

打印字符串

以浮点数的方式计数

其他就不一一演示了

=====================================================

(2)awk的输出重定向

  >,  >>,  | 

特殊文件描述符:

/dev/stdin:标准输入

/dev/stdout:标准输出

/dev/stderr:错误输出

========================================================

(3)awk的操作符

算术操作符:+ ,-,*,**,%,正负值:+x,-x

字符串操作符:连接

赋值操作符:=,+=,-=,*=,/=,%=,^=,**=,++,--

如果模式自身是等号,要写为/=/

比较操作符:<  <=  >   >=   ==   !*   ~   !~

逻辑操作符:&&   ||

(4)条件表达式

selector?if-ture-ezpression:if-false-expression

条件?为真输出的内容:为假输出的内容

四、函数调用

function_name (argu1,argy2)

(1) Regexp:格式/PATTERN/        //仅处理被/PATTERN/匹配到的行

(2)Expression:表达式,其结果为非0或非空字符串时满足条件:

仅处理满足条件的行

(3)Ranges:行范围,此前地址定界,startline,endline

仅处理范围内的行

(4)BEGIN/END:特殊模式,仅在awk命令的program运行之前或运行之后执行一次

(5)Empty:空模式,匹配文件中的所有行

五、控制语句

(1)   格式:if (condition) {then body}  [{else {else body}]

(2)  格式:while (condition) {while body}

#[[email protected] ~]# awk ‘{i=1;while (i>=NF) {if ($i>=20000) print $i;i++}}‘ test.txt

(3)  格式:do {do-while  body} while (condition)

(4)  格式:for (variable assignment ; condition; iteration process) {for body}

#awk -F: ‘{for(i=1;i<=3;i++) { if (length($i)>=8) {print $i}}}‘ /etc/passwd

***for循环可以用来遍历数组元素;语法:for  (i in  array) {for  body}

#awk -F: ‘$NF!~/^$/{BASH[$NF]++}END{for(A in BASH){printf "%-15s:%i\n",A,BASH[A]}}‘ /etc/passwd

(5)switch  (expression) {case  VALUE  or  /RGEEXP/:  statement1;...default: statementN}

(6)  break     continue  循环控制

(7)next,提前结束本行的处理注解进入下一行的处理

六、 awk对于数组的应用

关联数组

array[index-expression]

index-expression:可以使用任意字符串;如果某数组元素在引用时事先不存在,那么在引用时awk会自动创建此元素并初始化为空串,因此要判断数组是否存在该元素,必须使用index in array  这中格式

A[first]="hello awk"

print A[second]

要遍历数组中的每个元素,需要使用如下特殊结构

for (var in array) (for body)

其中var会遍历数组的索引

state [LISTEN]++

state [LISTEN]++

删除数组元素:需要从关系数组中删除数组的索引

delete  array[index]

七、awk的内置函数

1、 split(string,array[,fieldsep[,seps]]);

功能:将string表示的字符串以fielfsep为分割符进行切片,并将结果保存在数组中,数组以1开

2、ength([string])

功能:返回string字符串中字符的个数;

substr(string, start [, length])

功能:取string字符串中的子串,从start开始,取length个;start从1开始计数;

tolower(s)

3、能:将s中的所有字母转为小写

toupper(s)

功能:将s中的所有字母转为大写

时间: 2024-10-06 05:30:32

格式处理器--AWK的相关文章

Linux文本处理三剑客之GNU awk的使用

awk: Aho, Weinberger, Kernighan,报告生成器,格式化文本输出 有多种版本:New awk(nawk),GNU awk(gawk) gawk –模式扫描和处理语言 基本用法: awk[options] 'program' var=value file- awk[options] -f programfile var=value file- awk[options] 'BEGIN{ action;... } pattern{ action;... } END{ acti

awk多分隔符

一般我们在使用awk的过程中,分隔符可以使用默认的空格(默认可以省略)和指定分隔符的方式. 默认格式:awk '{print $n}' filename   #n为字段值 如: echo "0 1 2 3 4 5 6"|awk '{print $2}' 1 指定分隔符的格式:awk -F':' '{print $n}'  filename 或 awk -F: '{print $n}'  filename #如按:分割, 如: awk -F':' '{print $5}' /etc/pa

awk精解

下面介绍的是三种文本处理工具之一-----------------awk 文本处理三剑客为grep.sed(流编辑器).awk(报告生成器).awk来源于贝尔实验室的三个人,三个字母分别提取自名字. 1.awk基础 (1)awk命令简介 格式:awk [options] 'program' file... program:即 pattern{action statements;...},其中pattern(BEGIN.END),action statement(print.printf) 常用选

12、sed、awk、数组 学习笔记

sed命令: sed 选项 "地址定界编辑命令" FILE ... 选项: -n 静默模式,不输出模式空间中的内容 -r 扩展的正则表达式 -f /path/to/script_file 指定sed脚本文件 -e 'script' -e 'script' 指定多个编辑指令 -i 直接编辑原文件 地址定界: startline,endline startline到endline之间的所有行 /pat1/,/pat2/ 第一次匹配pat1到第一次匹配pat2之间的所有行 /pattern/

awk,systemctl,破解7root口令

awk -F 指明输入时用到的字段分隔符 默认空格为分隔符 -v 自定义变量 基本格式:awk [options] 'program' file $1,$2..$n称为域标识,$0为所有域. 文件的每一行称为记录 awk '{print}' /etc/passwd 默认 print $0 显示全段 awk 'BEGIN{print "hello,awd"}' awk '{print "hello,awd"}' 支持输入 df |awk '{print $5}' df

报告生成器-awk命令

AWK是一个优良的文本处理工具,Linux及Unix环境中现有的功能最强大的数据处理引擎之一.这种编程及数据操作语言(其名称得自于它的创始人阿尔佛雷德·艾侯.彼得·温伯格和布莱恩·柯林汉姓氏的首个字母)的最大功能取决于一个人所拥有的知识.awk经过改进生成的新的版本nawk,gawk,现在默认linux系统下日常使用的是gawk,用命令可以查看正在应用的awk的来源(ls -l /bin/awk ) 格式: awk [options] 'script' file1 file2,... awk [

awk进阶

awk:报告生成工具,能够将文本处理为比较直观理想的报表.主要是对文本结果的格式化,也能处理文本搜索,但是效率要比grep低的多的多. 用法格式: awk [options] 'script' file1,file2 . . . 'PATTERN{ action }' 一.分隔符:字段分隔符,行分隔符 -F: 输入分隔符,下面以:号为分隔符. [[email protected] ~]#  awk -F: '{print $1,$7}' /etc/passwd root /bin/bash bi

awk命令笔记

awk是一种可以处理数据.产生格式化报表的语言,功能相当强大.awk的工作方式是读取数据文件,将每一行数据视为一条记录(record),每笔记录以字段分隔符分成若干字段,然后输出各个字段的值.awk对每一条记录,都会套用一个"样式{操作}",如果该行符合样式,就执行指定的操作.样式或操作之一,可以省略.如果只有样式,表示要显示符合样式的数据行:如果只有操作,表示对每一数据行都执行该项操作. 以下是awk常用的作用格式: awk"样式"文件:把符合样式的数据行显示出来

Awk的使用

今天来讲Awk的使用,首先来介绍awk的工作原理. Awk的工作原理:将文件一行一行读入,然后对每一行再分段,段名称为$加上数字,分段依据是空格或者Tab键. 用法:awk '/模式/{命令1;命令2;...}' filename 其中上面的模式没有的话就是对全文所有行进行操作,多条命令用分号隔开. 例如who命令结果如下 比如我们想得到日期,那么命令如下 awk默认分隔符为空格或者Tab,有时候需要自己指定分隔符.比如 可以看出在/etc/passwd文件中,每一行是用冒号隔开的,一共有7部分