前幾天碰到乙個問題:現在有一萬多條記錄,其中包含重複的記錄,每條記錄佔一行,問如何從這些記錄中找到數量排名前10的記錄?
對於這個問題,可以程式設計實現。但是在linux環境下,可以簡單的通過一些命令的組合直接完成這項工作。這裡先講我使用的命令,再一一分析。
可以使用以下命令完成這個任務,其中所有的記錄以每條一行的形式儲存在data檔案中。
$ 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",第乙個欄位是數字,表示重複的記錄數;第二個欄位為記錄的內容。我們將對此內容進行排序。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簡潔而優美的特點。
**:
Linux命令 lvcreate巧用
語法lvcreate 選項 引數 來自 語法lvcreate 選項 引數 命令說明 root mwd lvcreate help lvcreate create a logical volume 建立邏輯卷 lvcreate a autobackup 自動備份 a activate a e l ad...
Linux命令實現檔案內容統計排序
一 主要用到的命令有sort 排序 uniq 去重 和cut 去除前面的數字 二 a.txt內容如下 bbbbbb.aaaaaaaa.ddddddd.ccc.ddddddd.ddddddd.bbbbbb.fffff.排序結果如下 ddddddd bbbbbb aaaaaaaa cccfffff so...
linux統計命令
排序命令 sort 按第一位字元大小去排列,以此類推 n按照數字大小去排列 r反序排列 o filename 排序後的順序輸出到另乙個檔案 t 分割符號 只能用乙個字元分割 eg t k n 按照第n列去排序 eg t k 3 v按照版本方式去排序 uniq 用來去重使用 當前行只會與上下行內容進行...