awk+uniq+sort 統(tǒng)計字符串出現(xiàn)次數(shù)并排序

在服務器開發(fā)中,我們經(jīng)常會寫入大量的日志文件。有時候我們需要對這些日志文件進行統(tǒng)計。Linux中我們可以利用以下命令簡單高效的實現(xiàn)這一功能。

需要用到的命令簡介

cat命令

參數(shù):

-n 或 –number 由 1 開始對所有輸出的行數(shù)編號?

?-b 或 –number-nonblank 和 -n 相似,只不過對于空白行不編號??

-s 或 –squeeze-blank 當遇到有連續(xù)兩行以上的空白行,就代換為一行的空白行?

| 管道

管道的作用是將左邊命令的輸出作為右邊命令的輸入

awk 命令

awk 是行處理器,優(yōu)點是處理龐大文件時不會出現(xiàn)內(nèi)存溢出或處理緩慢的問題,通常用來格式化文本信息。awk依次對每一行進行處理,然后輸出。

命令形式

awk [-F|-f|-v] ‘BEGIN{} //{command1; command2} END{}’ file?

[-F|-f|-v] 大參數(shù),-F指定分隔符,-f調用腳本,-v定義變量 var=value?

’ ’ 引用代碼塊??

BEGIN 初始化代碼塊,在對每一行進行處理之前,初始化代碼,主要是引用全局變量,設置FS分隔符??

// 匹配代碼塊,可以使字符串或正則表達式??

{} 命令代碼塊,包含一條或多條命令??

;多條命令使用分號分隔??

END 結尾代碼塊,對每一行進行處理后再執(zhí)行的代碼塊,主要進行最終計算或輸出

sort 命令

sort將文件的每一行作為一個單位,相互比較,比較原則是從首字符向后,依次按ASCII碼值進行比較,最后將他們按升序輸出。??

-b:忽略每行前面開始出的空格字符;?

-c:檢查文件是否已經(jīng)按照順序排序;??

-d:排序時,處理英文字母、數(shù)字及空格字符外,忽略其他的字符;??

-f:排序時,將小寫字母視為大寫字母;??

-i:排序時,除了040至176之間的ASCII字符外,忽略其他的字符;??

-m:將幾個排序號的文件進行合并;??

-M:將前面3個字母依照月份的縮寫進行排序;??

-n:依照數(shù)值的大小排序;??

-o<輸出文件>:將排序后的結果存入制定的文件;??

-r:以相反的順序來排序;??

-t<分隔字符>:指定排序時所用的欄位分隔字符;

uniq 命令

uniq 命令用于報告或忽略文件中的重復行,一般與sort命令結合使用???

-c或——count:在每列旁邊顯示該行重復出現(xiàn)的次數(shù);??

-d或–repeated:僅顯示重復出現(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)’是分隔符,它是一個正則表達式。意義是,用’txt=’或’&client’ 作為分隔符

3 對行進行排序?先排序是因為去重與統(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 代表在每列旁邊顯示該行重復出現(xiàn)的次數(shù)?執(zhí)行結果?

5 按重復次數(shù)排序

cat aaa | awk -F '.'? '{print $3}' |sort? | uniq -c| sort -nr

lockdreamer

sort 的 -n:依照數(shù)值的大小排序;-r 按照相反順序排列

執(zhí)行結果

作者:lockdreamer

鏈接:http://www.itdecent.cn/p/8e6c6252a2f3

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容