我需要一个按类别添加数量的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循环之间实现,我正在考虑一个关联数组,我几乎可以肯定这就是我需要的。
任何帮助表示赞赏!
答案 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] } }'