awk学习笔记
awk的用途
awk 在复杂的文本数据中,能够帮助用户筛选出需要的信息。
awk常见用法
awk 'pattern' file
awk '{action} file'
awk 'pattern {action} file'
pattern
即模式的意思,awk能够与强大的正则表达式结合,从复杂多变的数据中筛选出需要的信息。
{action}
内部的是awk脚本命令
常用的正则表达式符号
元字符 | 说明 |
---|---|
^ | 在串首匹配 |
$ | 在串尾部匹配 |
. | 匹配单个任意字符 |
* | 匹配0个或者多个前导字符 |
+ | 匹配1个或者多个前导字符 |
? | 匹配0个或者一个前导字符 |
[ABC] | 匹配A、B、C其中一个字符 |
[^ABC] | 不匹配A、B、C其中一个字符 |
[A-Z] | 匹配A-Z之间任意字符 |
A|B | 匹配A或者B |
(A|B) | 匹配A或者B |
典型的用例
简单的awk分割筛选数据的例子太多,这里我就不举例了。本文举一个配合正则表达式。从每一行中获取特定的内容,筛选出数据。
涉及的概念
- 常用的正则表达式符号
- 正则匹配捕获分组
- 管道 |
- sort uniq等命令
任务背景
线上日志中会有一些异常的id输出,作为日志。我们需要把这些id从日志每一行中提取出来,反馈给数据侧。
需要提取的日志的格式大致如此
任意内容xxx userid:[03dc9c2d53fc6cxxxxx22b021c6200102142xxxxxx],fields:[*] xxxxxx
我们只需要提取出其中的id即可
解决方案
使用如下命令
awk '{match($0,/userid:\[([[:alnum:]]+)\],/,a);print a[1]}' logfile |sort|uniq >3.log