1、简介:
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。数据可以来自标准输入、一个或多个文件,或其它命令的输出。它支持用户自定义 函数和动态正则表达式等先进功能,是linux/unix下的一个强大编程工具。它在命令行中使用,但更多是作为脚本来使用。awk的处理文本和数据的方 式是这样的,它逐行扫描文件,从第一行到最后一行,寻找匹配的特定模式的行,并在这些行上进行你想要的操作。如果没有指定处理动作,则把匹配的行显示到标 准输出(屏幕),如果没有指定模式,则所有被操作所指定的行都被处理。awk分别代表其作者姓氏的第一个字母。因为它的作者是三个人,分别是Alfred Aho、Brian Kernighan、Peter Weinberger。gawk是awk的GNU版本,它提供了Bell实验室和GNU的一些扩展。
2、语法:
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;
awk -F “ “ ‘{print $2}’ test
则输出:
am
are
解释:-F后面指定” “ 空格为分隔符; $2,表示第2个字段; test :表示是文件名。
awk会根据空格和制表符,将每一行分成若干字段,依次用$1 $2 $3 代表第一个字段、第二个字段、第三个字段。
3、变量
除了 $+数字 表示某个字段,awk 还提供了其他一些变量
变量NF:表示当前行有多少个字段,因此 $NF 表示一行的最后一个字段;
print 命令里面的逗号,表示输出的时候,两个部分之间使用空格分隔。
变量NR:表示当前处理的是第几行
print命令里面,如果原样输出字符,要放在双引号里面。
awk 的其他内置变量如下:
FILENAME:当前文件名
FS:字段分隔符,默认是空格和制表符。
RS:行分隔符,用于分隔每一行,默认是换行符。
OFS:输出字段的分隔符,用于打印是分隔字段,默认为空格。
ORS:输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT:数字输出的格式,默认为:%6.6g
4、函数
awk 提供了内置函数,方便对原始数据的处理
常用的函数:
toupper(): 字符转为大写
tolower():字符转为小写
length():返回字符串长度
substr():返回子字符串
sin():正弦
cos():余弦
sqrt():平方根
rand():随机数
5、条件
awk 允许指定输出条件,只输出符合条件的行。
输出条件要写在动作的前面。
awk ‘条件 动作’ 文件名
6、if语句
awk 提供了if结构,用于编写复杂的条件。不仅可以指定if,还可以指定else部分。举例如下:
AWK 运算符: