按类别添加数量的Bash脚本

时间:2014-02-03 23:59:29

标签: bash shell

我需要一个按类别添加数量的bash脚本的帮助。

输入行和输出行的形式为“category”“quantity”

示例文件:

Mustard 6
Apple 4
Mustard 2

输出应为:

Mustard 8
Apple 4

顺序无关紧要,可能是:

Apple 4
Mustard 8

文件/输入格式正确,第二个字段为数字(可能是负数)

仅使用sh shell脚本,不使用awk,python,perl等。

我需要用cat“$ @”| ...

启动代码

到目前为止我所拥有的:

cat "$@" | while read line
do

如果第一行的第一个单词=第二行的第一个单词,则添加$ 2并删除该行,重复所有行

done

我不确定如何在while循环之间实现,我正在考虑一个关联数组,我几乎可以肯定这就是我需要的。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:1)

如果我们可以使用bash但不能使用awk

#!/bin/bash
declare -A c
cat "$@" | { while read item amount
do
    ((c[$item]+=$amount))
done

for i in "${!c[@]}"
do
    echo "$i ${c[$i]}"
done
}

这会产生:

Mustard 8
Apple 4

如果我们不受限制,我们可以使用awk,这会让事情变得更容易:

awk '{ c[$1]+=$2 } END { for (i in c) { print i,c[i] } }' groceries

或者,如果我们想从cat "$@"开始,那么:

cat "$@" | awk '{ c[$1]+=$2 } END { for (i in c) { print i,"=",c[i] } }'