Linux的面试常客AWK
语法
awk [options] '{[pattern] commands}' filenames
其中options代表参数,单引号中的内容代表要执行的命令,filenames代表文件名。
例如:awk -F, ‘{print $1,$2}’ log.txt
awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
一个awk脚本通常由:BEGIN语句块、能够使用模式匹配的通用语句块、END语句块3部分组成,这三个部分是可选的。
options
-F fs fs指定输入分隔符,fs可以是字符串或正则表达式,如-F,
例子:awk -F, ‘{print $1,$2}’ log.txt
解释:将log.txt文件中的每一行以,分割,输出每一行的第一个和第二个元素
如果不指定这个参数,默认为空格分割
-v var=value 赋值一个用户定义变量,将外部变量传递给awk
-f scripfile 从脚本文件中读取awk命令
内置变量
变量 | 描述 |
---|---|
$n | 当前记录的第n个字段,字段间由FS分隔 |
$0 | 完整的输入记录 |
ARGC | 命令行参数的数目 |
ARGIND | 命令行中当前文件的位置(从0开始算) |
ARGV | 包含命令行参数的数组 |
CONVFMT | 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组 |
ERRNO | 最后一个系统错误的描述 |
FIELDWIDTHS | 字段宽度列表(用空格键分隔) |
FILENAME | 当前文件名 |
FNR | 各文件分别计数的行号 |
FS | 字段分隔符(默认是任何空格) |
IGNORECASE | 如果为真,则进行忽略大小写的匹配 |
NF | 一条记录的字段的数目 |
NR | 已经读出的记录数,就是行号,从1开始 |
OFMT | 数字的输出格式(默认值是%.6g) |
OFS | 输出记录分隔符(输出换行符),输出时用指定的符号代替换行符 |
ORS | 输出记录分隔符(默认值是一个换行符) |
RLENGTH | 由match函数所匹配的字符串的长度 |
RS | 记录分隔符(默认是一个换行符) |
RSTART | 由match函数所匹配的字符串的第一个位置 |
SUBSEP | 数组下标分隔符(默认值是/034) |
常见任务
- 查找含某字符的行
awk `/abc/` log.txt
在log.txt文件中查找包含“abc”字符串的行
- 显示文件行数
awk 'BEGIN{ i=0 } { i++ } END{ print i }' log.txt
- 读取指定行数据
awk 'NR==2, NR==3' log.txt
读取log.txt文件中的第2到3行的数据
- 显示所有内容
awk '{print}' log.txt