首页 > 技术文章 > awk抓取数据

LyningCoder 2014-08-20 18:09 原文

感觉awk判断语句像是乱序的,这一周学习awk总结

grep "all_time" log/bn-as.log | head -4000 |
grep -o baidu_id="[a-z|A-Z|0-9_]*"| awk -F '=' '{if($2 != "") print $2 >> "output_lyning" }'

 

grep "provider=common" log/bn-bs.log | head -40000 | grep "is_hit_cache=0" |
grep -o "all_time=[0-9]*" | awk -F '=' '{sum+=$2; count+=1} END{print sum/count}'

 

grep  "provider=common" log/bn-bs.log | head -40000 | grep "is_hit_cache=0" | wc -l

 awk 'NR < 2{for(i=1;i<NF;i++)print $i}' part-00000  

 

杀死进程:ps ux | grep awk | awk '{print "kill -9 "  $2}' | sh

找到两点到三点的文件目录 name=`ll | awk '{split($8,a,":"); if((a[1]==14)||(a[1]==15)) print $9}'`

 rm -rf $name

系统变量:

ARGV 命令行参数数组
ENVIRON 环境变量数组
FILENAME 当前输入文件名
FNR 当前文件中的记录号
FS 字段分隔符
IGNORECASE 忽略正则表达式和串的大小写
NF 当前记录中的字段数
NR 至今读取的记录数
OFMT 数的输出格式,缺省为"%.6g"
OFS 输出字段分隔符
ORS 输出记录分隔符
RS 输入记录分隔符
RSTART 由match() 匹配的第一个字符的索引
RLENGTH 由match() 匹配的串的长度
SUBSEP 下标分隔符,缺省为"�34"
 

内置字符串函数

gsub(r,s,t) 在字符串t中,用字符串s替换和正则表达式r匹配的所有字符串。返回替换的个数。如果没有给出t,缺省为$0
index(s,t)   返回s 中字符串t 的位置,不出现时为0
length(s) 返回字符串s 的长度,当没有给出s时,返回$0的长度
match(s,r) 返回r 在s 中出现的位置,不出现时为0。设置RSTARTRLENGTH的值
split(s,a,r) 利用r 把s 分裂成数组a,返回元素的个数。如果没有给出r,则使用FS。数组分割和字段分割采用同样的方式
sprintf(fmt,expr_list)   根据格式串fmt,返回经过格式编排的expr_list
sub(r,s,t) 在字符串t中用s替换正则表达式t的首次匹配。如果成功则返回1,否则返回0。如果没有给出t,默认为$0
substr(s,p,n) 返回字符串s中从位置p开始最大长度为n的字串。如果没有给出n,返回从p开始剩余的字符串
tolower(s) 将串s 中的大写字母改为小写,返回新串
toupper(s) 将串s 中的小写字母改为大写,返回新串
 

 

感觉awk判断语句像是乱序的,找到x,y坐标大于0,且他的所在城市

 1 grep "all_time" bn-as.log.2014081922  | head -100 | awk -F ' ' '{
  2 for(i=1; i<=NF; i++)    {
  3     split($i, arr, "=");
  4     if( (arr[1] == "x") && (arr[2] + 0) > 0){
  5         print "x=" arr[2] ;
  6     }
  7     if((arr[1] == "y") && (arr[2] + 0) > 0){
  8         print "y=" arr[2];
  9         flag = 1
 10     }
 11     if(flag == 1){
 12         flag = 0
 13         for(j=i; j>=1; j--){
 14             split($j, a, "=");
 15             if(a[1] == "city_id"){
 16                 print $j;
 17                 print "\n"
 18                 break
 19             }
 20         }
 21     } 
 22 }
 23 }'
~                    

  

推荐阅读