1、字符替换
echo "a b c 2011-11-22 a:d" | awk '{gsub(/[ab]/,"",$0);print $0}' 使用正则语法把a或b字符替换成空字符
$0指取当前行作为字符串处理 ,awk命令默认使用空格字符分隔处理
注意gsub的返回结果是 替换次数, $0被替换完后还是存放在$0中,下一命令行print可以取正确结果
2、字符分隔
dstat| awk -F "[ |]+" 使用正则语法分隔处理行,把空格或|字符都当前当前行处理
3、日期打印
echo "a b c 2011-11-22 a:d" | awk '{print strftime("%y-%m-%d %T",systime());}'
输出结果为15-02-10 16:02:19,systime()为取系统当前时间,有或没有结果都一样,strftime()默认取当前时间
4、if else
dstat| awk -F "[ |]+" '{if(match($10, "M")>=1){gsub(/[MkB]/,"",$10);recv+=$10;}else if(match($10, "k")>=1){gsub(/[MkB]/,"",$10);recv+=$10/1024;}; print recv}'
match为匹配字符串是否出现
5、命令换行 使用\,与C++语法一样
#!/bin/bash
dstat| awk -F "[ |]+" 'BEGIN{max=0;count=0;curr=300}{ \
if(match($0, "total")<=1 && match($0, "idl")<=1){count++;sysc+=$1+$2;max=(($1+$2) >max ?($1+$2):max);\
if(match($10, "M")>=1){gsub(/[MkB]/,"",$10);recv+=$10;}else if(match($10, "k")>=1){gsub(/[MkB]/,"",$10);recv+=$10/1024;} \
if(match($11, "M")>=1){gsub(/[MkB]/,"",$11);send+=$11;}else if(match($11, "k")>=1){gsub(/[MkB]/,"",$11);send+=$11/1024;} \
};if(count%curr==0){ \
{now=strftime("%y-%m-%d %T",systime());}{print now,"sysc=",sysc/curr,"Max=",max,"recv=",recv/curr,"send=",send/curr >> "/usr/local/nds/log/dstat2015.log";fflush(stdout)};sysc=0;max=0;recv=0;send=0 }}'