在服務(wù)器開發(fā)中,我們經(jīng)常會寫入大量的日志文件厨钻。有時候我們需要對這些日志文件進(jìn)行統(tǒng)計诗充。Linux中我們可以利用以下命令簡單高效的實(shí)現(xiàn)這一功能蝴蜓。
需要用到的命令簡介
cat命令
參數(shù):
-n 或 –number 由 1 開始對所有輸出的行數(shù)編號?
?-b 或 –number-nonblank 和 -n 相似,只不過對于空白行不編號??
-s 或 –squeeze-blank 當(dāng)遇到有連續(xù)兩行以上的空白行诵冒,就代換為一行的空白行?
| 管道
管道的作用是將左邊命令的輸出作為右邊命令的輸入
awk 命令
awk 是行處理器,優(yōu)點(diǎn)是處理龐大文件時不會出現(xiàn)內(nèi)存溢出或處理緩慢的問題惭蟋,通常用來格式化文本信息告组。awk依次對每一行進(jìn)行處理,然后輸出我碟。
命令形式
awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file?
[-F|-f|-v] 大參數(shù),-F指定分隔符厘托,-f調(diào)用腳本,-v定義變量 var=value?
’ ’ 引用代碼塊??
BEGIN 初始化代碼塊包斑,在對每一行進(jìn)行處理之前神帅,初始化代碼,主要是引用全局變量,設(shè)置FS分隔符??
// 匹配代碼塊沐兰,可以使字符串或正則表達(dá)式??
{} 命令代碼塊,包含一條或多條命令??
;多條命令使用分號分隔??
END 結(jié)尾代碼塊比原,對每一行進(jìn)行處理后再執(zhí)行的代碼塊,主要進(jìn)行最終計算或輸出
sort 命令
sort將文件的每一行作為一個單位氢拥,相互比較嫩海,比較原則是從首字符向后叁怪,依次按ASCII碼值進(jìn)行比較涣觉,最后將他們按升序輸出混驰。??
-b:忽略每行前面開始出的空格字符皂贩;?
-c:檢查文件是否已經(jīng)按照順序排序;??
-d:排序時昆汹,處理英文字母明刷、數(shù)字及空格字符外,忽略其他的字符满粗;??
-f:排序時辈末,將小寫字母視為大寫字母;??
-i:排序時映皆,除了040至176之間的ASCII字符外,忽略其他的字符澈驼;??
-m:將幾個排序號的文件進(jìn)行合并缭贡;??
-M:將前面3個字母依照月份的縮寫進(jìn)行排序颠印;??
-n:依照數(shù)值的大小排序燃乍;??
-o<輸出文件>:將排序后的結(jié)果存入制定的文件介陶;??
-r:以相反的順序來排序玻墅;??
-t<分隔字符>:指定排序時所用的欄位分隔字符;
uniq 命令
uniq 命令用于報告或忽略文件中的重復(fù)行谓罗,一般與sort命令結(jié)合使用???
-c或——count:在每列旁邊顯示該行重復(fù)出現(xiàn)的次數(shù);??
-d或–repeated:僅顯示重復(fù)出現(xiàn)的行列;??
-f<欄位>或–skip-fields=<欄位>:忽略比較指定的欄位;??
-s<字符位置>或–skip-chars=<字符位置>:忽略比較指定的字符梳杏;??
-u或——unique:僅顯示出一次的行列劲适;??
-w<字符位置>或–check-chars=<字符位置>:指定要比較的字符霞势。
現(xiàn)在我們開始
1 讀入文件
cat aaa
lockdreamer
2 從每一行取出我們需要的字符串
cat aaa | awk -F '.'? '{print $3}'
-F 指定每一行的分隔符
例子:‘(txt=|&client)’是分隔符旬昭,它是一個正則表達(dá)式搓逾。意義是杯拐,用’txt=’或’&client’ 作為分隔符
3 對行進(jìn)行排序?先排序是因?yàn)槿ブ嘏c統(tǒng)計的 ‘unip’命令只能處理相鄰行
cat aaa | awk -F '.'? '{print $3}' |sort
lockdreamer
可以看到相同行已經(jīng)被排在了一起
4 統(tǒng)計數(shù)量與去重
cat aaa | awk -F '.'? '{print $3}' |sort? | uniq -c
lockdreamer
uniq -c 中的-c 代表在每列旁邊顯示該行重復(fù)出現(xiàn)的次數(shù)?執(zhí)行結(jié)果?
5 按重復(fù)次數(shù)排序
cat aaa | awk -F '.'? '{print $3}' |sort? | uniq -c| sort -nr
lockdreamer
sort 的 -n:依照數(shù)值的大小排序霞篡;-r 按照相反順序排列
執(zhí)行結(jié)果
作者:lockdreamer
鏈接:http://www.reibang.com/p/8e6c6252a2f3