awk常用命令笔记

awk格式化输出

data文件

123-345.3112-345
12-2l.234-2324
ddd
2-3-4
cat data | awk -F '-' '{printf("%.2f\n",$2);}'

解释:-F表示解析时的分隔符,使用printf来格式化输出,否则使用print $2输出原文就够了

输出:

345.31
2.00
0.00
3.00

awk求和

如果文件里都是数,一行一个,要求这些数的和。

cat data | awk '{sum += $1} END {print "Sum = ", sum}'

awk内建变量

NR表示行数,NF表示一行的数据段数,OFS表示输出的分隔符,默认是空格

cat data | awk '{print $NF}'

解析:输出每行末尾字段

cat data | awk '{OFS="-"; print $1, $2}'

解析:头两字段间加-

awk求平均

cat data | awk '{sum += $1} END {print "Average = ", sum/NR}'

awk求最大值

cat data | awk 'BEGIN {max = 0} {if ($1 > max+0) max = $1 fi} END {print "Max=", max}'

awk求最小值

cat data | awk 'BEGIN {min = 9999999} {if ($1 < min+0) min = $1 fi} END {print "Min=", min}'

解析:BEGIN用于在进行每一条处理语句之前设置全局变量。+0作用是将字符串转换成数值类型,否则就会进行字符串的比较,结果并非所期望的

awk一次性统计最大值、最小值、平均值

grep 'count: ' data | sed 's/.* \(\w\+\)$/\1/' | awk 'BEGIN{max=0;min=9999;sum=0} {if ($1>max+0) max=$1 fi; if ($1<min+0) min=$1 fi; sum+=$1} END {print "max=", max, "min=", min, "ave=", sum / NR}'

解析:判断语句要用括号括起来,echo "999" | awk '{print ($1>"1000")}'如果不加括号,是什么也不输出。

awk统计cache命中率

tail -10000 xxx.log | grep 'ch=' | sed 's/.* ch=\(\w\+\) .*/\1/' | awk '{sum += $1} END {print sum / 100000}'
发表于 2014年04月15日 11:17   评论:0   阅读:2410  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo