Unix命令按特定字符的出现次数排序

时间:2013-03-01 17:35:24

标签: file unix sorting grep

我有一个这种格式的文件:

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

1 个答案:

答案 0 :(得分: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上的排序工具非常强大。但它对列/字段进行排序,而不是基于某些计算。您的需求需要先进行计算,然后根据结果进行排序。

所以我只需添加一个新列,即:的计数,然后使用sort命令对其进行排序,最后删除该列。

awk adds the column
sort does sort
sed removes that column

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