合并排序列表

合并排序列表

我有几个 .txt 文件(在同一个目录中),如下所示:

   123 carrot
    50 apple
    13 tomato
     5 potato
     2 pear

   100 carrot
    10 apple
     3 tomato
     2 potato

我需要将它们合并为一个排序列表。因此,如果我只有上述两个列表,我会得到

   223 carrot
    60 apple
    16 tomato
     7 potato
     2 pear

有没有一种使用 shell 命令的简单方法可以做到这一点,或者我应该开始编写代码?

谢谢你!

答案1

“shell 命令”和“代码”之间的界线在哪里?这个例子可能超出了那条界线,但它只是一个快速聚合函数,awk我已经为另一个(更复杂的)目的编写了它,所以我不妨发布它。

假设文件位于目录中dir/awk可以将它们总结如下:

awk '
    {fruits[$2]+=$1}
    END { for (fruit in fruits) {printf "%6s %s\n", fruits[fruit], fruit} }
' dir/* | sort -rn

分解:

  • 检查所有文件中的每一行,并将第一个字段的值添加到数组中该水果索引的现有值fruits(如果不存在,则创建该索引)。
  • 遍历文件后,循环索引fruits并以指定的格式打印它们的值和名称。
  • 可以进行数组排序awk,但只使用会更容易理解sort-rn按降序对数字进行排序。

相关内容