1. 基本语法
awk的变量不需要声明可以直接使用
awk的变量没有固定的类型
{...} 代表 awk 中的块
BEGIN{...} 在 程序的开始执行 相当于 init
END{...} 在 程序的最后执行 相当于 finally
字符串连接
awk 可以使用隐式的字符串连接
比如:
"a""b""c" == "abc"
a="ab";c="c"; a" "c=="ab c"; a""c=="abc"
$[第几个匹配项] 使用 FS 或-F 进行分割 , 默认为 空白字符 (-
$0 整个匹配项
$1 第一个
sub函数
sub(pattern,repalce_value,source_string) 直接把匹配的更新为 source_string
例如:
2007-09-28 09:43:21 INFO Thread-29 4 return code:701
$7 == code:701
$2 == 09:43:21
1、sub(/^code:/,"",$6); $6 == 701
2、sub(/.[^:]+.[^:]+$/,"",$2); $2 == 09
假如分析日志test.log里内容:
- 2007-09-28 10:55:44 INFO http:
- 2007-09-28 10:55:44 INFO http:
- 2007-09-28 10:55:44 INFO http:
- 2007-09-28 10:55:44 INFO http:
- 2007-09-28 10:55:45 INFO http:
- 2007-09-28 10:55:45 INFO http:
- 2007-09-28 10:55:45 INFO http:
- 2007-09-28 10:55:45 INFO http:
1. 显示test.log的所有行的第2列(默认以空格分割)
cpp 代码
- awk '{print $2}' test.log
- 输出值:
- 10:55:44
- 10:55:44
- 10:55:44
- 10:55:44
- 10:55:45
- 10:55:45
- 10:55:45
- 10:55:45
默认是以空格分割,可以自己定义:用FS或-F自定义
比如以冒号(:)分割:
cpp 代码
- awk -F: '{print $1}' test.log
- 输出为:
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 或者
- awk 'BEGIN{FS=":"} {print $1}' test.log
- 输出为:
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
- 2007-09-28 10
2. 显示test.log里以空格分割出来的第2个字符串是“10:55:45”的所有行
cpp 代码
- awk '$2 ~ /^10:55:45$/ {print $0}' test.log
- 输出为:
- 2007-09-28 10:55:45 INFO http:
- 2007-09-28 10:55:45 INFO http:
- 2007-09-28 10:55:45 INFO http:
- 2007-09-28 10:55:45 INFO http:
3. 统计某个小时内return code各个状态码的个数
java 代码
- awk '{sub("^code:","",$6);sub(".[^:]+.[^:]+$","",$2);if($2){a[$2" "$6]++;} }END{for(i in a){print i" "a[i];}}' test.log
- 或者
- awk '{sub(/^code:/,"",$6);sub(/.[^:]+.[^:]+$/,"",$2);if($2){a[$2" "$6]++;} }END{for(i in a){print i" "a[i];}}' test.log
-
- 输出结果为:
- 10 304 4
- 10 700 3
- 10 701 1
4.awk '$13~/^code:/{sub(/^code:/,"",$13);sub(/.[^:]+.[^:]+$/,"",$2);if($2){a[$2" "$13]++;} }END{for(i in a){if(i~/^01/){print i" "a[i];}}}' test.log
分享到:
相关推荐
最牛逼的Linux awk命令详细介绍和实例快速学习
linux awk 初级编程
Linuxawk命令详解[归类].pdf
linux awk 命令大全 awk 常用命令
Linux awk 命令 AWK是一种处理文本文件的语言,是一个强大的文本分析工具。 之所以叫AWK是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符。 语法 awk [选项参数]...
linux awk命令详解.doc
Linux AWK使用描述
linuxawk将多个文件结果列合并到一个文件整理.pdf
awk 学习资料!!!
linux-awk.doc
linuxawk完全手册.pdf
awk详解awk详解awk详解awk详解awk详解awk详解awk详解awk详解awk详解
LINUXawk用法[定义].pdf
linux awk 内置变量使用介绍.docx
Linux入门培训教程 linux awk 多文件操作2种实现方法.pdf
此为linux中awk语句的详细使用教程。
它不仅是 Linux 中也是任何环境中现有的功能最强大的数据处理引擎之一。这种编程及数据操作语言(其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母)的最大功能取决于一个...
该文档简单描述了一下AWK的内置函数。。。。
NULL 博文链接:https://greatwqs.iteye.com/blog/1871506