最近有個項目,需要對在liunx服務器上生成的日志文件進行分析,文件格式如下:
id time
1001,2011-08-19 00:00:00
1002,2011-08-19 01:00:00
1001,2011-08-19 02:00:00
1003,2011-08-19 03:00:00
需要排重算出id的個數,固然使用php也可以分析結果,不過使用linux命令更方便,一行搞定。
linux命令如下:
排重后id個數
cat ****.txt | awk '{print $1}' | sort | uniq -c | wc -l
按id出現次數排序
cat ****.txt | awk '{print $1}' | sort | uniq -c | sort -k 1 -n -r | wc -l
將結果導入文件
cat ****.txt | awk '{print $1}' | sort | uniq -c | sort -k 1 -n -r | wc -l > result.txt
命令解析:
sort:表示前面輸入的結果文件中的內容進行排序。sort命令是對於每一行的內容根據字典序(ASCII碼)進行排序,這樣可以保證重復的記錄時相鄰的。
awk ‘{print $1}’ :日志記錄中的第一個字段。
uniq –c:表示合並相鄰的重復記錄,並統計重復數。因為uniq -c 只會合並相鄰的記錄,所以在使用該命令之前需要先排序。
sort –k 1 -n -r|wc –l:經過uniq -c 處理之后的數據格式形如"2 data",第一個字段是數字,表示重復的記錄數;第二個字段為記錄的內容。我們將對此內容進行排序。sort -k 1表示對於每行的第一個字段進行排序,這里即指代表重復記錄數的那個字段。因為sort命令的默認排序是按照ASCII,這就會導致按從大到小進行排序時,數值2會排在數值11的前面,所以需要使用-n 參數指定sort命令按照數值大小進行排序。-r 表示逆序,即按照從大到小的順序進行排序。
wc命令
wc命令的功能為統計指定文件中的字節數、字數、行數, 並將統計結果顯示輸出。
語法:wc [選項] 文件…
說明:該命令統計給定文件中的字節數、字數、行數。如果沒有給出文件名,則從標准輸入讀取。wc同時也給出所有指定文件的總統計數。字是由空格字符區分開的最大字符串。
該命令各選項含義如下:
- c 統計字節數。
- l 統計行數。
- w 統計字數
參考文章:
http://www.gnbase.com/thread-907-1.html