2013-03-01 37 views
0

的occurances数Unix命令排序我有这种格式的文件:通过一个特定的字符

key value:value:value:value 
key value:value 
key value 
key value:value:value 

那里是在第一列和第二位分隔的值列表的关键。 是否有任何命令可以基于以下内容中的出现次数对该文件进行分类:在值列表中,即从最大值到最小值前面的例子是这样的:

key value:value:value:value 
key value:value:value 
key value:value 
key value 

回答

2

快速和肮脏的:

awk -F: '{$0=NF"#"$0}1' file|sort -nr|sed 's/.*#//' 

测试你的榜样:

kent$ echo "key value:value:value:value 
key value:value 
key value 
key value:value:value"|awk -F: '{$0=NF"#"$0}1'|sort -nr|sed 's/.*#//' 
key value:value:value:value 
key value:value:value 
key value:value 
key value 

编辑

Linux上的排序工具/ unix框非常强大。但它根据列/字段排序,而不是基于某种计算。您的需求需要首先进行计算,然后根据结果进行排序。

所以我只是添加一个新的列,这是:的计数,然后使用排序命令排序它,在最后删除该列。

awk adds the column 
sort does sort 
sed removes that column 

您可以删除这些管道并查看输出,然后您将看到它是如何工作的。

+0

你能解释一下这个工作原理吗? – user847988 2013-03-01 19:24:01

+0

@ user847988请参阅编辑回答解释 – Kent 2013-03-01 21:15:04