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
如果文件里都是数,一行一个,要求这些数的和。
cat data | awk '{sum += $1} END {print "Sum = ", sum}'
NR表示行数,NF表示一行的数据段数,OFS表示输出的分隔符,默认是空格
cat data | awk '{print $NF}'
解析:输出每行末尾字段
cat data | awk '{OFS="-"; print $1, $2}'
解析:头两字段间加-
cat data | awk '{sum += $1} END {print "Average = ", sum/NR}'
cat data | awk 'BEGIN {max = 0} {if ($1 > max+0) max = $1 fi} END {print "Max=", max}'
cat data | awk 'BEGIN {min = 9999999} {if ($1 < min+0) min = $1 fi} END {print "Min=", min}'
解析:BEGIN用于在进行每一条处理语句之前设置全局变量。+0
作用是将字符串转换成数值类型,否则就会进行字符串的比较,结果并非所期望的
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")}'
如果不加括号,是什么也不输出。
tail -10000 xxx.log | grep 'ch=' | sed 's/.* ch=\(\w\+\) .*/\1/' | awk '{sum += $1} END {print sum / 100000}'