`
ttitfly
  • 浏览: 617196 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

linux awk

阅读更多
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里内容:
  1. 2007-09-28 10:55:44 INFO  http://px688.blog.163.com/rss/   return code:700   
  2. 2007-09-28 10:55:44 INFO  http://www.aaa.com  return code:304   
  3. 2007-09-28 10:55:44 INFO  http://insraq.org/rss.xml return code:701   
  4. 2007-09-28 10:55:44 INFO  http://netdrr.yo2.cn/feed/  return code:700   
  5. 2007-09-28 10:55:45 INFO  http://www.sysnail.cn/feed/  return code:304   
  6. 2007-09-28 10:55:45 INFO  http://blog.a.com.cn/myog/index_rss return code:700   
  7. 2007-09-28 10:55:45 INFO  http://blog.sa.com.cn/rss/afish.xml return code:304   
  8. 2007-09-28 10:55:45 INFO  http://blog.sna.com.cn/myblog return code:304  
1. 显示test.log的所有行的第2列(默认以空格分割)
cpp 代码
  1. awk '{print $2}' test.log    
  2. 输出值:   
  3. 10:55:44   
  4. 10:55:44   
  5. 10:55:44   
  6. 10:55:44   
  7. 10:55:45   
  8. 10:55:45   
  9. 10:55:45   
  10. 10:55:45  
默认是以空格分割,可以自己定义:用FS或-F自定义
 
比如以冒号(:)分割:
 
cpp 代码
  1. awk -F: '{print $1}' test.log    
  2. 输出为:   
  3. 2007-09-28 10   
  4. 2007-09-28 10   
  5. 2007-09-28 10   
  6. 2007-09-28 10   
  7. 2007-09-28 10   
  8. 2007-09-28 10   
  9. 2007-09-28 10   
  10. 2007-09-28 10   
  11. 或者   
  12. awk 'BEGIN{FS=":"} {print $1}'  test.log    
  13. 输出为:   
  14. 2007-09-28 10   
  15. 2007-09-28 10   
  16. 2007-09-28 10   
  17. 2007-09-28 10   
  18. 2007-09-28 10   
  19. 2007-09-28 10   
  20. 2007-09-28 10   
  21. 2007-09-28 10  
 
2. 显示test.log里以空格分割出来的第2个字符串是“10:55:45”的所有行
cpp 代码
  1. awk '$2 ~ /^10:55:45$/ {print $0}' test.log    
  2. 输出为:   
  3. 2007-09-28 10:55:45 INFO  http://www.sysnail.cn/feed/  return code:304   
  4. 2007-09-28 10:55:45 INFO  http://blog.a.com.cn/myog/index_rss return code:700   
  5. 2007-09-28 10:55:45 INFO  http://blog.sa.com.cn/rss/afish.xml return code:304   
  6. 2007-09-28 10:55:45 INFO  http://blog.sna.com.cn/myblog return code:304  

 

3. 统计某个小时内return code各个状态码的个数

java 代码
  1. awk '{sub("^code:","",$6);sub(".[^:]+.[^:]+$","",$2);if($2){a[$2" "$6]++;} }END{for(i in a){print i" "a[i];}}' test.log   
  2. 或者   
  3. awk '{sub(/^code:/,"",$6);sub(/.[^:]+.[^:]+$/,"",$2);if($2){a[$2" "$6]++;} }END{for(i in a){print i" "a[i];}}' test.log   
  4.   
  5. 输出结果为:   
  6. 10 304 4  
  7. 10 700 3  
  8. 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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics