我有一个这种格式的文件:
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
答案 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
您可以删除这些管道并查看输出,然后您将看到它是如何工作的。