本文参考awk英文Tutorial和三十分钟学会awk,对awk做了一个非常简单的介绍,如果需要更详细的用法可以去看上面的链接。
awk是一种编程语言,用于在linux/unix下对文本和数据进行处理。在linux中,grep 更适合单纯的查找或匹配文本, sed 更适合编辑匹配到的文本, awk 更适合格式化文本,对文本进行较复杂格式处理。
awk把文件逐行读入,然后以空格为默认分隔符将每行切片,切开的部分再进行各种处理。
基本语法
awk的基本语法如下:
awk 动作 文件名
awk [options] 'pattern{action}' file
pattern 表示 AWK 在数据中查找的内容(就是要表示的正则表达式),用斜杠括起来。
action 是在找到匹配内容时所执行的一系列命令。
awk会根据空格和制表符,将每一行分成若干字段,依次用$1
、$2
、$3
代表第一个字段、第二个字段、第三个字段等等。
举个例子。awk '{print $5}' demo.txt
,表示输出信息的第五列。
$*
表示第*列。
$0
表示当前整个行。
$NF
为最后一列。
pattern
pattern是条件,符合这个条件的行才会被继续处理。
- BEGIN语句块:在程序开始时执行,它只执行一次,在这里可以初始化变量.BEGIN是AWK的关键字,因此它必须为大写,注意,这个语句块是可选的。
- BODY语句块:此块中的命令会对输入的每一行执行,我们也可以通过提供模式来控制这种行为。注意,BODY语句块没有关键字。
- END语句块:在程序的最后执行,END是AWK的关键字,因此必须为大写,它也是可选的。
options
-F设置输入分隔符。awk默认使用空格作为分隔符,连续多个空格算作一个。如果用其他分隔符,可以用-F参数制定分隔符为冒号。比如:awk -F ':' '{print $5}' demo.txt
。
可以用-v FS='#'来指定输入分隔符,-v OFS='--' 来指定输出分隔符(参考下面的内置变量)。
action
awk '{print $1 $2}'
表示连接在一起输出。
awk '{print $1,$2}'
表示用分隔符隔开输出。
variable
内置变量:FS(输入分隔符,默认是空格和制表符)
OFS(输出分隔符,默认为空格)
RS(输入时行分割符,默认为换行符)
ORS(输出时行分割符,默认为换行符)
NF(当前行被分隔成几列)
NR(当前处理的行号)
FILENAME(当前文件名)
ARGC(命令行参数个数)
ARGV(命令行参数的数组)
FNR(各文件分别记数的行号,处理>1文件时)。
内置变量不需要$来调用。其中,ARGV[0] = awk。之后是其他的参数(files)。
自定义变量有两种方法:
- -v 变量名 = 变量的值 (区分大小写)。
- 在{}中定义。
函数
awk还提供了一些内置函数,方便对原始数据的处理。
内置函数的列表可以查看这里。
使用脚本文件
awk [options] -f file ....
网友评论