AWK 用法简介
概要
AWK是Unix平台上一种可以对文本进行逐行处理的编程语言,它来源于3个创作者的名字:Aho、(Peter)Weinberg和(Brain)Kernighan. 与sed和grep很相似,awk是一种样式扫描与处理工具,但其功能却大大强于sed和grep。awk提供了极其强大的功能:它几乎可以完成grep和sed所能完成的全部工作,同时,它还可以可以进行样式装入、流控制、数学运算符、进程控制语句甚至于内置的变量和函数。awk的三位创建者已将它正式定义为:样式扫描和处理语言。
AWK的调用方式
1). 程序体直接写到AWK命令行中,适用较简单的情况
awk 'program' input-file1 input-file2 ...
2). 程序体写入文件中,用AWK命令调用该文件
awk -f program-file input-file1 input-file2 ...
3). C shell作为命令解释程序,调用AWK来执行AWK程序,写成的脚本
#!/bin/csh -f
awk '
{ print $8, "\t", $3} \
'
4). AWK作为命令解释程序,写成的脚本
#!/bin/awk -f
{ print $8, "\t", $3}
AWK的参数说明
awk [ -F re] [parameter...] ['prog'] [-f progfile][in_file...]
参数说明:
-F re: 允许awk更改其字段分隔符。
parameter: 该参数帮助为不同的变量赋值。
'prog': awk的程序语句段。必须用单引号:'和'括起,以防被shell解释。
这个程序语句段的标准形式为: 'pattern {action}'
(1) pattern参数是匹配模式,跟Sed命令类似。
(2) action参数总是被大括号包围,由一系统awk语句组成,各语句间用";"分隔。
awk在pattern给定的样式匹配记录上执行其操作。 使用“#”作为注释符。
(3) 可以省略pattern和action之一,但不能两者同时省略,当省略pattern时没
有样式匹配,表示对所有行(记录)均执行操作,省略action时执行缺省的操作—在标准输出上显示。
(4) 可以包含多个pattern {action},如果一个记录满足多个pattern,其对应的action会被执行多次
-f progfile: 允许awk调用执行程序文件。progfile是一文本文件,必须符合awk语法。
in_file: awk的输入文件,awk允许对多个输入文件进行处理。
*awk不修改输入文件。如果未指定输入文件,awk将接受标准输入,并将结果显示在标准输出上。awk支持输入输出重定向。(跟SED类似)
AWK的记录(Record)与字段(Field)
awk处理的工作与数据库的处理方式有相同之处,其相同处之一就是awk支持对记录和字段的处理,其中对字段的处理是grep和sed不能实现的。在awk中,缺省的情况下总是将文本文件中的一行视为一个记录,而将一行中的某一部分作为记录中的一个字段。为了操作这些不同的字段,awk借用shell的方法,用$1,$2,$3...这样的方式来顺序地表示行(记录)中的不同字段。特殊地,awk用$0表示整个行(记录)。不同的字段之间是用称作分隔符的字符分隔开的。系统默认的分隔符是空格。awk允许在命令行中用-F re的形式来改变这个分隔符。事实上,awk用一个内置的变量FS来记忆这个分隔符,可以在程序中进行修改。
AWK的运算,判断与赋值
运算
运算符 用途
------------------
x^y x的y次幂
x**y 同上
x%y 计算x/y的余数(求模)
x+y x加y
x-y x减y
x*y x乘y
x/y x除y
-y 负y(y的开关符号);也称一目减
++y y加1后使用y(前置加)
y++ 使用y值后加1(后缀加)
--y y减1后使用y(前置减)
y-- 使用后y减1(后缀减)
x=y 将y的值赋给x
x+=y 将x+y的值赋给x
x-=y 将x-y的值赋给x
x*=y x*y的值赋给x
x/=y 将x/y的值赋给x x%=y 将x%y的值赋给x
x^=y 将x^y的值赋给x
x**=y 将x**y的值赋给x
判断:
操作符 含义
x==y x等于y
x!=y x不等于y
x>y x大于y
x>=y x大于或等于y
x小于y
x >= 'BEGIN { FS=":";print "统计销售金额";total=0}
>{print $3;total=total+$3;}
>END {printf "销售金额总计:%.2f",total}' sx
>是shell提供的第二提示符,如要在shell程序awk语句和awk语言中换行,在行尾加反斜杠\
在这里,BEGIN预置了内部变量FS(字段分隔符)和自定义变量total,同时在扫描之前显示出输出行头。而END则在扫描完成后打印出总合计。
2、流程控制语句
2.1、if...else语句:
if(表达式)
语句1
else
语句2
格式中"语句1"可以是多个语句,如果你为了方便awk判断也方便你自已阅读,你最好将多个语句用{}括起来。awk分枝结构允许嵌套。
2.2、while语句
while(表达式语句
2.3、do-while语句
do
{
语句
}while(条件判断语句)
2.4、for语句
for(初始表达式;终止条件;步长表达式)
{语句}
while、do-while和for语句中允许使用break, continue,exit来控制程序走向。
Break:中断当前正在执行的循环并跳到循环外执行下一条语句。
Continue:从当前位置跳到循环开始处执行。
Exit:当exit语句不在END中时,该命令表现得如同到了文件尾,所有模式或操作将停止,END模式中的操作被执行。而出现在END中的exit将导致程序终止。
AWK的变量
awk提供两种变量,一种是awk内置的变量,在awk程序中引用内置变量不需要使用标志符"$"awk提供的另一种变量是自定义变量。当然这种变量不能与内置变量及其它awk保留字相同,在awk中引用自定义变量必须在它前面加上标志符"$"。与C语言不同的是,awk中不需要对变量进行初始化,awk根据其在awk中第一次出现的形式和上下文确定其具体的数据类型。当变量类型不确定时,awk默认其为字符串类型。这里有一个技巧:如果你要让你的awk程序知道你所使用的变量的明确类型,你应当在在程序中给它赋初值。
AWK中的函数
AWK的函数同样包括内置函数和用户自定义的函数。原始的awk不提供函数功能,只有在nawk或较新的awk版本中才可以增加函数。
函数的使用包含两部分:函数的定义与函数调用。其中函数定义又包括要执行的代码(函数本身)和从主程序代码传递到该函数的临时调用。
awk函数的定义方法如下:
function 函数名(参数表){
函数体
}
函数名必须是一个合法的标志符,参数表中可以不提供参数(但在调用函数时函数名后的一对括号仍然是不可缺少的),也可以提供一个或多个参数。awk的参数也是通过值来传递的。
在awk中调用函数比较简单,其方法与C语言相似,但awk比C语言更为灵活,它不执行参数有效性检查。换句话说,在你调用函数时,可以列出比函数预计(函数定义中规定)的多或少的参数,多余的参数会被awk所忽略,而不足的参数,awk将它们置为缺省值0或空字符串,具体置为何值,将取决于参数的使用方式。
awk函数有两种返回方式:隐式返回和显式返回。当awk执行到函数的结尾时,它自动地返回到调用程序,这是函数是隐式返回的。如果需要在结束之前退出函数,可以明确地使用返回语句提前退出。方法是在函数中使用形如:return 返回值 格式的语句。
例:下面的例子演示了函数的使用。
nawk
>'BEGIN{pageno=1;file=FILENAME
>pageno=print_header(file,pageno);span lang="EN-US" style="">#调用函数print_header
>printf("当前页页号是:%d\n",pageno);
}
#定义函数print_header
function print_header(FileName,PageNum){
printf("%s %d\n",FileName,PageNum); >PageNum++;return PageNUm;
}
}' myfile
AWK的内置变量(预定义变量)
说明:表中v项表示第一个支持变量的工具:A=awk,N=nawk,P=POSIX awk,G=gawk
V 变量 含义 缺省值
--------------------------------------------------------
N ARGC 命令行参数个数
G ARGIND 当前被处理文件的ARGV标志符
N ARGV 命令行参数数组
G CONVFMT 数字转换格式 %.6g
P ENVIRON UNIX环境变量
N ERRNO UNIX系统错误消息
G FIELDWIDTHS 输入字段宽度的空白分隔字符串
A FILENAME 当前输入文件的名字
P FNR 当前记录数
A FS 输入字段分隔符 空格
G IGNORECASE 控制大小写敏感0(大小写敏感)
A NF 当前记录中的字段个数
A NR 已经读出的记录数
A OFMT 数字的输出格式 %.6g
A OFS 输出字段分隔符 空格
A ORS 输出的记录分隔符 新行
A RS 输入的记录他隔符 新行
N RSTART 被匹配函数匹配的字符串首
N RLENGTH 被匹配函数匹配的字符串长度
N SUBSEP 下标分隔符 "\034"
AWK的内置函数
V 函数 用途或返回值
------------------------------------------------
N gsub(reg,string,target) 每次常规表达式reg匹配时替换target中的string
N index(search,string) 返回string中search串的位置
A length(string) 求串string中的字符个数
N match(string,reg) 返回常规表达式reg匹配的string中的位置
N printf(format,variable) 格式化输出,按format提供的格式输出变量variable。
N split(string,store,delim) 根据分界符delim,分解string为store的数组元素
N sprintf(format,variable) 返回包含基于format的格式化数据,variables是要放到串中的数据
G strftime(format,timestamp) 返回format日期或时间串,timestmp是systime()函数返回的时间
N sub(reg,string,target) 第一次当常规表达式reg匹配,替换target串中的字符串
A substr(string,position,len) 返回一个以position开始len个字符的子串
P totower(string) 返回string中对应的小写字符
P toupper(string) 返回string中对应的大写字符
A atan(x,y) x的余切(弧度)
N cos(x) x的余弦(弧度)
A exp(x) e的x幂
A int(x) x的整数部分
A log(x) x的自然对数值
N rand() 0-1之间的随机数
N sin(x) x的正弦(弧度)
A sqrt(x) x的平方根
A srand(x) 初始化随机数发生器。如果忽略x,则使用system()
G system() 返回自1970年1月1日以来经过的时间(按秒计算)
一些例子:
1. 打印11月被修改的文件的字节数
ls –lg | awk '$6 == “NOV” {sum += $5} END {print sum}'
2. 文件result中包含FAILED的行数
awk '/FAILED/ {sum += 1} END {print sum}' result
3. 打印file文件最长行的长度
awk 'if (length($0) > max) max = length($0)} END {print max}' file
4. 输出file文件的行数
awk 'END {print NR}' file
NR是内置变量,表示已经读出的记录数,在END后输出即是总行数
用cat file | wc –l 命令组合可以完成同样的功能
发表评论
-
linux清除mysql占用cache
2013-11-01 10:55 2041在linux内部将cache分为2种: 1、write/rea ... -
linux /proc目录功能
2013-03-26 13:11 871/proc/ 运行中的程序信息 cpuinfo iopo ... -
linux经常登入登出mysql重复输入密码
2013-01-16 17:51 970经常登入、登出mysql,尤其是密码重新输入比较复杂时,使用& ... -
linux判断路径下所有内容是否为文件夹
2012-03-27 16:01 1328PATH="完整路径即可" functi ... -
linux sysbench+mysql
2012-02-16 17:25 0一、sysbench安装 tar -zxvf ... -
linux中将mysql状态信息导出为文件
2011-12-21 17:58 1224一、vim exe_show.sh FILESTAF=`dat ... -
LINUX RPM使用心得
2011-11-25 11:20 0一、普通的安装 rpm -ivh ... -
Linux安装Net-snmp
2011-11-07 18:30 1400一、安装net-snmp 网上看了很多,但感觉都是一样 ... -
【转载】SNMP 诊断方法
2011-11-02 18:40 658http://wiki.jiankongbao.com/dok ... -
pietty登录提示输入密码
2011-11-02 11:14 1157使用密钥登录pietty 在 ... -
【转载】LVS用在MySQL Slave上能带来什么..
2011-11-01 15:39 1159LVS用在MySQL Slave上能带来什么... 来源: C ... -
【转载】linux shell 数组建立及使用技巧
2011-08-17 16:37 1068详解请见:http://suo.iteye.com/blo ... -
【转载】学习linux脚本推荐的网站
2011-08-11 16:34 715学习linux脚本推荐的网站(繁体的) 有些名词叫法不一样, ... -
【转载】Linux下的Memcache安装
2011-06-23 10:23 801Linux下的Memcache安装 最近在研究怎么让Disc ... -
[转载]linux通过rpm包安装、配置及卸载mysql
2010-10-14 14:59 1059通过rpm包安装、配置及 ... -
[转载]linux查看系统信息命令大全
2010-10-14 11:40 1206[转载]linux查看系统信息命令大全 系统 # uname ... -
【Linux 学习】Windows和VM Linux 拷贝文件
2010-07-14 17:48 1147首先,VM需要使用的是桥接网卡模式 然后,使用FileZil ... -
VM Linux 查看IP命令
2010-07-14 17:44 1836正常情况下输入 ifconfig命令可以查看IP信息 如果提示 ... -
Vmware与主机间共享文件的七种方法(附图+详解)
2010-07-09 17:33 150Vmware与主机间共享文件的七种方法(附图+详解)
相关推荐
Linux AWK 用法指南 AWK 是一种强大的数据处理和文本处理工具,经常用于 Linux 和 Unix 系统中。AWK 的全称是 Aho, Weinberger 和 Kernighan,这三个名字来自三位开发者。AWK 的主要功能是从文件或字符串中基于指定...
最牛逼的Linux awk命令详细介绍和实例快速学习
标签"linux"表明这个教程不仅适用于awk本身,还涵盖了在Linux环境中使用awk的实际场景,比如结合管道符(|)和其他Linux命令一起使用,以实现更强大的文本处理能力。 压缩包中的三个PDF文件——"l-awk2-pdf.pdf"、...
Linux中的`awk`命令是一个强大的文本分析工具,它允许用户基于特定的模式匹配对文本文件进行处理。在本文中,我们将深入探讨`awk`的基本概念、语法和常见用途。 首先,`awk`有三个主要版本:`awk`、`nawk`和`gawk`...
Linux awk 命令详解 Linux awk 命令是 Unix 环境中的一种功能强大的文本处理工具,由 Bell Labs 的 Alfred Aho、Peter Weinberger 和 Brian Kernighan 于 1977 年开发。awk 命令的主要功能是从文件或字符串中基于...
Linux awk 命令 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 语法 awk [选项参数]...
linux中awk的使用方法 设计得问题比较简单 ;方便理解;
#### 一、Awk 简介与基本用法 Awk 是一种在 Unix 和类 Unix 操作系统上广泛使用的文本处理工具,能够帮助用户快速处理文本数据,执行复杂的文本分析任务。Awk 的主要功能包括模式扫描、数据排序、数据过滤等。 **...
《Linux命令——AWK用法详解》 AWK,一种在Unix/Linux系统中广泛使用的文本处理工具,源自三位杰出的计算机科学家Aho、Weinberg和Kernighan之名。与sed和grep类似,AWK也是一种样式扫描与处理工具,但它在功能上...
【Linux Awk 学习手册】 awk 是一个强大的文本分析工具,源于 UNIX 系统,由 Aho、Weinberg 和 Kernighan 三位开发者命名。它的全名并不表示特定的功能,而是创建者姓名的首字母缩写。awk 的主要功能在于对文本数据...
这里提供了 Awk 的一些常见用途和示例,涵盖了 Awk 的基本使用方法和技巧,适合初学者快速上手。 以上内容全面地介绍了 Awk 的基础概念、命令格式、选项、环境变量、运算符、记录与域、正则表达式等重要知识点,并...
#### Awk的基本使用方法 Awk的基本命令格式如下: ```sh awk [-F var] 'pattern {action}' [filename] ``` 其中: - `-F var` 用于指定字段分隔符,默认为任何空白字符。 - `pattern` 定义了一个模式,只有匹配该...
每个文件可能代表一个特定的练习,涵盖了`awk`的不同功能和用法,例如模式匹配、条件语句、循环、函数等。通过逐步解决这些练习,用户可以逐步掌握`awk`的基本语法和高级特性。 `awk`的源码分析可以帮助我们理解它...
【Awk 简介】 Awk,是一种轻量级的编程语言,专用于处理文本和数据。它可以处理标准输入、文件或者其他命令的输出。Awk以行为单位处理数据,每一行被视为一个记录,而字段是由分隔符(默认为空格或制表符)分隔的...
Linux中的awk命令是一个强大的文本分析工具,用于处理和解析文件中的数据。awk的名称来源于它的创始人: Alfred V. Aho, Peter J....对于Linux系统管理员和开发者来说,熟练使用awk是必备技能之一。
Linux awk 详解 awk 是一种功能强大的程序语言,主要用于处理文档资料。它的名称来自三个最初设计者的姓氏的第一个字母:Alfred V. Aho、Peter J. We i n b e rg e r 和 Brian W.Kernighan。awk 最初在 1977 年完成...
最后,awb命令的使用示例可以帮助我们更好地理解awk的具体用法。例如,通过-F参数可以指定分隔符,然后使用print命令输出指定的字段。如果要指定输出格式,则可以修改OFS变量。利用NR和FNR变量,我们可以判断awk正在...
在Linux系统中,通常使用的`awk`版本是GNU `awk`(gawk),它包含了一些扩展功能。 ### 1. `awk`简介 `awk`的工作方式是逐行扫描文件,根据用户定义的模式对匹配的行执行指定的操作。如果未指定模式,它会处理所有...
Linux中的AWK命令是一个强大的文本分析工具,它允许用户在数据流中进行模式匹配和处理。这个命令的名字来源于它的三位创始人—— Alfred V. Aho、Peter J. Weinberger 和 Brian W. Kernighan 的首字母缩写。在Linux...