awk 經常使用方法

一、字符替換 bash

echo "a b c 2011-11-22 a:d" | awk '{gsub(/[ab]/,"",$0);print $0}' 使用正則語法把a或b字符替換成空字符 命令行

$0指取當前行做爲字符串處理 ,awk命令默認使用空格字符分隔處理 字符串

注意gsub的返回結果是 替換次數,  $0被替換完後仍是存放在$0中,下一命令行print能夠取正確結果 字符串處理

二、字符分隔 awk

dstat| awk -F "[ |]+" 使用正則語法分隔處理行,把空格或|字符都當前當前行處理 語法

三、日期打印 im

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()默認取當前時間 co

四、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爲匹配字符串是否出現

五、命令換行 使用\,與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 }}'

相關文章
相關標籤/搜索