巧用Linux命令完成统计排序功能yes2
前幾天碰到一個(gè)問題:現(xiàn)在有一萬多條記錄,其中包含重復(fù)的記錄,每條記錄占一行,問如何從這些記錄中找到數(shù)量排名前10的記錄?
對(duì)于這個(gè)問題,可以編程實(shí)現(xiàn)。但是在Linux環(huán)境下,可以簡(jiǎn)單的通過一些命令的組合直接完成這項(xiàng)工作。這里先講我使用的命令,再一一分析。
可以使用以下命令完成這個(gè)任務(wù),其中所有的記錄以每條一行的形式存儲(chǔ)在data文件中。
Linux代碼?
$ sort data | uniq -c | sort -k 1 -n -r | head 10?
$ sort data | uniq -c | sort -k 1 -n -r | head 10
現(xiàn)在來一一分析這些命令組合的含義。
1) sort data
表示對(duì)data文件中的內(nèi)容進(jìn)行排序。sort命令是對(duì)于每一行的內(nèi)容根據(jù)字典序(ASCII碼)進(jìn)行排序,這樣可以保證重復(fù)的記錄時(shí)相鄰的。
2) sort data | uniq -c
這里,通過管道(|)將左邊部分的命令的輸出作為右邊部分的輸入。uniq -c 表示合并相鄰的重復(fù)記錄,并統(tǒng)計(jì)重復(fù)數(shù)。因?yàn)閡niq -c 只會(huì)合并相鄰的記錄,所以在使用該命令之前需要先排序。
3) sort data | uniq -c | sort -k 1 -n -r
經(jīng)過uniq -c 處理之后的數(shù)據(jù)格式形如"2 data",第一個(gè)字段是數(shù)字,表示重復(fù)的記錄數(shù);www.linuxidc.com第二個(gè)字段為記錄的內(nèi)容。我們將對(duì)此內(nèi)容進(jìn)行排序。sort -k 1表示對(duì)于每行的第一個(gè)字段進(jìn)行排序,這里即指代表重復(fù)記錄數(shù)的那個(gè)字段。因?yàn)閟ort命令的默認(rèn)排序是按照ASCII,這就會(huì)導(dǎo)致按從大到小進(jìn)行排序時(shí),數(shù)值2會(huì)排在數(shù)值11的前面,所以需要使用-n 參數(shù)指定sort命令按照數(shù)值大小進(jìn)行排序。-r 表示逆序,即按照從大到小的順序進(jìn)行排序。
4) sort data | uniq -c | sort -k 1 -n -r | head 10
head 命令表示選取文本的前x行。通過head 10 就可以得到排序結(jié)果中前十行的內(nèi)容。
總結(jié):通過這個(gè)例子,可以深刻的體會(huì)到Linux的命令工具集的強(qiáng)大之處,通過幾個(gè)命令的組合便可以完成這樣一件常見但又不簡(jiǎn)單的任務(wù),體現(xiàn)了Linux簡(jiǎn)潔而優(yōu)美的特點(diǎn)。
來源:http://www.linuxidc.com/Linux/2011-01/31347.htm
總結(jié)
以上是生活随笔為你收集整理的巧用Linux命令完成统计排序功能yes2的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 12年本田雅阁2.4油耗多少?
- 下一篇: 以前济南水屯路有个菜市场杨庄有个调凉菜的