歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 巧用Linux命令完成統計排序功能

巧用Linux命令完成統計排序功能

日期:2017/2/28 16:24:40   编辑:Linux教程

前幾天碰到一個問題:現在有一萬多條記錄,其中包含重復的記錄,每條記錄占一行,問如何從這些記錄中找到數量排名前10的記錄?

對於這個問題,可以編程實現。但是在Linux環境下,可以簡單的通過一些命令的組合直接完成這項工作。這裡先講我使用的命令,再一一分析。

可以使用以下命令完成這個任務,其中所有的記錄以每條一行的形式存儲在data文件中。

Linux代碼
$ sort data | uniq -c | sort -k 1 -n -r | head 10

$ sort data | uniq -c | sort -k 1 -n -r | head 10

現在來一一分析這些命令組合的含義。

1) sort data

表示對data文件中的內容進行排序。sort命令是對於每一行的內容根據字典序(ASCII碼)進行排序,這樣可以保證重復的記錄時相鄰的。

2) sort data | uniq -c

這裡,通過管道(|)將左邊部分的命令的輸出作為右邊部分的輸入。uniq -c 表示合並相鄰的重復記錄,並統計重復數。因為uniq -c 只會合並相鄰的記錄,所以在使用該命令之前需要先排序。

3) sort data | uniq -c | sort -k 1 -n -r

經過uniq -c 處理之後的數據格式形如"2 data",第一個字段是數字,表示重復的記錄數;www.linuxidc.com第二個字段為記錄的內容。我們將對此內容進行排序。sort -k 1表示對於每行的第一個字段進行排序,這裡即指代表重復記錄數的那個字段。因為sort命令的默認排序是按照ASCII,這就會導致按從大到小進行排序時,數值2會排在數值11的前面,所以需要使用-n 參數指定sort命令按照數值大小進行排序。-r 表示逆序,即按照從大到小的順序進行排序。

4) sort data | uniq -c | sort -k 1 -n -r | head 10

head 命令表示選取文本的前x行。通過head 10 就可以得到排序結果中前十行的內容。

總結:通過這個例子,可以深刻的體會到Linux的命令工具集的強大之處,通過幾個命令的組合便可以完成這樣一件常見但又不簡單的任務,體現了Linux簡潔而優美的特點。

Copyright © Linux教程網 All Rights Reserved