awk抓取数据
感觉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。设置RSTART和RLENGTH的值 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 }' ~