1. 程式人生 > >一段linux上統計平均響應時間的awk指令碼

一段linux上統計平均響應時間的awk指令碼

grep '15:10:00' daily-2015-12-20.log| grep 'RESPONSE'|awk 'BEGIN {t = 0;} {split($10,a,"=");t+=a[2];} END {print t/NR;}'

其中NR代表已經處理的行數,常見的awk內建資料見下表

屬性 說明
$0 當前記錄(作為單個變數)
1n 當前記錄的第n個欄位,欄位間由FS分隔
FS 輸入欄位分隔符 預設是空格
NF 當前記錄中的欄位個數,就是有多少列
NR 已經讀出的記錄數,就是行號,從1開始
RS 輸入的記錄他隔符默 認為換行符
OFS 輸出欄位分隔符 預設也是空格
ORS 輸出的記錄分隔符,預設為換行符
ARGC 命令列引數個數
ARGV 命令列引數陣列
FILENAME 當前輸入檔案的名字
IGNORECASE 如果為真,則進行忽略大小寫的匹配
ARGIND 當前被處理檔案的ARGV標誌符
CONVFMT 數字轉換格式 %.6g
ENVIRON UNIX環境變數
ERRNO UNIX系統錯誤訊息
FIELDWIDTHS 輸入欄位寬度的空白分隔字串
FNR 當前記錄數
OFMT 數字的輸出格式 %.6g
RSTART 被匹配函式匹配的字串首
RLENGTH 被匹配函式匹配的字串長度
SUBSEP 陣列分隔符。將(I,J)轉換為 I SUBSEP J, 模擬多維陣列用

字串處理函式

函式 說明
gsub( Ere, Repl, [ In ] ) 除了正則表示式所有具體值被替代這點,它和 sub 函式完全一樣地執行,。
sub( Ere, Repl, [ In ] ) 用 Repl 引數指定的字串替換 In 引數指定的字串中的由 Ere 引數指定的擴充套件正則表示式的第一個具體值。sub 函式返回替換的數量。出現在 Repl 引數指定的字串中的 &(和符號)由 In 引數指定的與 Ere 引數的指定的擴充套件正則表示式匹配的字串替換。如果未指定 In 引數,預設值是整個記錄($0 記錄變數)。
index( String1, String2 ) 在由 String1 引數指定的字串(其中有出現 String2 指定的引數)中,返回位置,從 1 開始編號。如果 String2 引數不在 String1 引數中出現,則返回 0(零)。
length [(String)] 返回 String 引數指定的字串的長度(字元形式)。如果未給出 String 引數,則返回整個記錄的長度($0 記錄變數)。
blength [(String)] 返回 String 引數指定的字串的長度(以位元組為單位)。如果未給出 String 引數,則返回整個記錄的長度($0 記錄變數)。
substr( String, M, [ N ] ) 返回具有 N 引數指定的字元數量子串。子串從 String 引數指定的字串取得,其字元以 M 引數指定的位置開始。M 引數指定為將 String 引數中的第一個字元作為編號 1。如果未指定 N 引數,則子串的長度將是 M 引數指定的位置到 String 引數的末尾 的長度。
match( String, Ere ) 在 String 引數指定的字串(Ere 引數指定的擴充套件正則表示式出現在其中)中返回位置(字元形式),從 1 開始編號,或如果 Ere 引數不出現,則返回 0(零)。RSTART 特殊變數設定為返回值。RLENGTH 特殊變數設定為匹配的字串的長度,或如果未找到任何匹配,則設定為 -1(負一)。
split( String, A, [Ere] ) 將 String 引數指定的引數分割為陣列元素 A[1], A[2], …, A[n],並返回 n 變數的值。此分隔可以通過 Ere 引數指定的擴充套件正則表示式進行,或用當前欄位分隔符(FS 特殊變數)來進行(如果沒有給出 Ere 引數)。除非上下文指明特定的元素還應具有一個數字值,否則 A 陣列中的元素用字串值來建立。
tolower( String ) 返回 String 引數指定的字串,字串中每個大寫字元將更改為小寫。大寫和小寫的對映由當前語言環境的 LC_CTYPE 範疇定義。
toupper( String ) 返回 String 引數指定的字串,字串中每個小寫字元將更改為大寫。大寫和小寫的對映由當前語言環境的 LC_CTYPE 範疇定義。
sprintf(Format, Expr, Expr, … ) 根據 Format 引數指定的 printf 子例程格式字串來格式化 Expr 引數指定的表示式並返回最後生成的字串。