一、简介:
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据能够来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义 函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更可能是做为脚原本使用。awk的处理文本和数据的方 式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操做。若是没有指定处理动做,则把匹配的行显示到标 准输出(屏幕),若是没有指定模式,则全部被操做所指定的行都被处理。awk分别表明其做者姓氏的第一个字母。由于它的做者是三我的,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。linux
二、语法:
awk [选项参数] ‘script’ var=value file(s)
或
awk [选项参数] -f scriptfile var=value file(s)
使用方法:
awk ‘{pattern + action}’ {filenames} # pattern 表示AWK在数据中查找的内容,而action 是在找到的匹配内容时所执行的一系列命令。花括号({})不须要在程序中始终出现,是用于根据特定的模式对一系列指令进行分组。pattern 就是要表示的正则表达式,用斜杠括起来。
一般,awk是以文件的一行为处理单位。awk每接受文件的一行,而后执行相应的命令,来处理文本。
在awk中,花括号用于将几块代码组合到一块儿,这一点相似于C语言。正则表达式
-F参数:指定分隔符,能够指定一个或多个。
NF :用来记录一行中有多少个字段
NR:记录数量,一行就是一个记录。编程
例子:
cat test
i am a student ;
you are a teacher;app
awk -F “ “ ‘{print $2}’ test
则输出:
am
are
解释:-F后面指定” “ 空格为分隔符; $2,表示第2个字段; test :表示是文件名。
awk会根据空格和制表符,将每一行分红若干字段,依次用$1 $2 $3 表明第一个字段、第二个字段、第三个字段。编程语言
三、变量
除了 $+数字 表示某个字段,awk 还提供了其余一些变量
变量NF:表示当前行有多少个字段,所以 $NF 表示一行的最后一个字段;
print 命令里面的逗号,表示输出的时候,两个部分之间使用空格分隔。
变量NR:表示当前处理的是第几行
print命令里面,若是原样输出字符,要放在双引号里面。ide
awk 的其余内置变量以下:
FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分隔每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印是分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为:%6.6g函数
四、函数
awk 提供了内置函数,方便对原始数据的处理
经常使用的函数:
toupper(): 字符转为大写
tolower():字符转为小写
length():返回字符串长度
substr():返回子字符串
sin():正弦
cos():余弦
sqrt():平方根
rand():随机数工具
五、条件
awk 容许指定输出条件,只输出符合条件的行。
输出条件要写在动做的前面。
awk ‘条件 动做’ 文件名spa
六、if语句
awk 提供了if结构,用于编写复杂的条件。不只能够指定if,还能够指定else部分。举例以下:命令行
AWK 运算符: