
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
运算与判断:
作为一种程序设计语言所应具有的特点之一,awk支持多种运算,这些运算与C语言提供的基本相同:如+、-、*、/、%等等,同时,awk也支持C语言中类似++、--、+=、-=、=+、=-之类的功能,这给熟悉C语言的使用者编写awk程序带来了极大的方便。
作为对运算功能的一种扩展,awk还提供了一系列内置的运算函数(如log、sqr、cos、sin等等)和一些用于对字符串进行 *** 作(运算)的函数(如length、substr等等)。这些函数的引用大大的提高了awk的运算功能。
作为对条件转移指令的一部分,关系判断是每种程序设计语言都具备的功能,awk也不例外。awk 中允许进行多种测试,如常用的==(等于)、!=(不等于)、>(大于)、>=(大于等于)、<=(小于等于)等等,同时,作为样式匹配,还提供了~(匹配于)和!~(不匹配于)判断。
作为对测试的一种扩充,awk也支持用逻辑运算符:!(非)、&&;(与)、||(或)和括号()进行多重判断,这大大增强了awk的功能。本文的附录中列出了awk所允许的运算、判断以及 *** 作符的优先级。
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。awk有三个不同的版本:awk、nawk和gawk,未作特别说明,一般指gawk,gawk是awk的GNU版本。
之所以叫awk是因为其取了三位创始人Alfred Aho,Peter Weinberger,和Brian Kernighan的Family Name
的首字符。
使用方法:
awk'{pattern+action}'{filenames}
尽管 *** 作可能会很复杂,但语法总是这样,其中pattern表示awk在数据中查找的内容,而action是在找到匹配内容时所执行的一系列命令。花括号({})不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。pattern就是要表示的正则表达式,用斜杠括起来。
awk语言的最基本功能是在文件或者字符串中基于指定规则浏览和抽取信息,awk抽取信息后,才能进行其他文本 *** 作。完整的awk脚本通常用来格式化文本文件中的信息。
通常,awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本。
调用awk的三种方式
1、命令行方式
awk[-F field-separator]'commands'input-file(s)
其中,commands是真正awk命令,[-F域分隔符]是可选的。input-file(s)是待处理的文件。
在awk中,文件的每一行中,由域分隔符分开的每一项称为一个域。通常,在不指名-F域分隔符的情况下,默认的域分隔符是空格。
2、shell脚本方式
将所有的awk命令插入一个文件,并使awk程序可执行,然后awk命令解释器作为脚本的首行,一遍通过键入脚本名称来调用。
相当于shell脚本首行的:#!/bin/sh
可以换成:#!/bin/awk
3、将所有的awk命令插入一个单独文件,然后调用:
awk-f awk-script-file input-file(s)
其中,-f选项加载awk-script-file中的awk脚本,input-file(s)跟上面的是一样的。
awk命令是Alfred Aho, Peter Weinberger, Brian Kernighan三位作者联合开发的,用于Linux/Unix中处理数据和产生报告。awk命令功能十分强大,可根据需要抓取、截取指定的列或行。首先在/mnt目录下创建示例文本文件f1,其内容如下:
1 hello hello
2 data data
3 xyz abc
4 123 789
5 ftp
6 Apache
7 apache
然后,使用awk对f1文件内容进行处理,举例如下。
①awk -F " " '{print $2,$3}' f1:截取显示文档的第二列和第三列,-F指定分隔符为空格,$表示显示第几列。其中print表示要做输出信息的动作,$2和$3表示要输出的列号,awk要求将print已经输出列等内容放在“'{}'”之间。
②awk -F " " '($1>3){print $2,$3}' f1:选取第一列的值大于3的行,显示其第二列和第三列,在“()”中指定筛选条件。
③awk 'NR==4 || NR==3' f1:显示第三行和第四行,NR表示行号。
④awk '/data/ {print $2}' f1:抓取包含指定字符的行,再对列进行截取。此例中,awk先按照“data”字符串对文件f1中的行筛选,找出包含“data”的行以后,再按照默认的空格作为分隔符对行的内容做切割,仅打印出第二列的内容。
⑤awk '$2 ~ /data/ ' f1:抓取第二列包含指定字符的行。其中“~”表示是否匹配指定的“data”,如果第二列的内容包含“data”就打印出整行内容。
⑥awk '$2 !~ /data/ ' f1:抓取第二列不包含指定字符的行。其中“!~”表示是否不匹配指定的“data”,如果第二列的内容不包含“data”就打印出整行内容。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)