问题日志排查提效,使用awk -F快速提取关键数据

147 阅读1分钟

一个简单的例子

线上日志里出现了如下大量的日志

An error occurred during processing,id=123,error=xxxxmesgg

我们想提取id=123,来根据id简单分组统计下哪些id出现的次数最多;并且想将所有的id数据提取出来用来后续的订正,该如何实现呢?

这个时候通过awk命令可以很快的实现

awk -F'[=,]' '/An error occurred during processing/ {print $3}' error.log

效果如下

日志文件
image.png

image.png

awk -F

awk -F用于指定awk命令中的字段分隔符。

awk命令默认使用空格作为字段分隔符。但是,当处理以其他字符(如逗号、制表符等)分隔的数据时,我们可以使用-F选项来指定分隔符。

以下是awk -F的基本语法:

awk -F 分隔符 '操作' 文件名

其中,

  • -F 分隔符:指定要使用的字段分隔符。
  • 操作:对匹配到的行执行的操作,可以是打印、计算等。
  • 文件名:要处理的文件名。

例如,假设我们有一个名为file.txt的文件,内容如下: 例如,假设我们有一个名为file.txt的文件,内容如下:

John,Smith,25
Jane,Doe,30

如果我们想以逗号作为字段分隔符,提取第2个字段,可以运行以下命令:

awk -F ',' '{print $2}' file.txt

输出结果为:

Smith
Doe

这样,我们就成功使用-F选项指定了逗号作为字段分隔符,并提取了第2个字段。

对于开头的例子,如果想按多个分割符来分割可以使用-F'[=,]',在上面的例子中,将使用用=和,分割成:

1、An error occurred during processing

2、id

3、123

4、error

5、xxxxmesgg

{print $3} 打印第三个,也就是提取出了123