0

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

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
4

1 回答 1

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 box 上的排序工具非常强大。但它对列/字段进行排序,而不是基于某些计算。您的要求需要先进行计算并对结果进行排序。

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

awk adds the column
sort does sort
sed removes that column

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

于 2013-03-01T17:42:10.933 回答