我有几个 .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
按降序对数字进行排序。