我需要bash脚本的帮助
输入线和输出线的形式为"类别"数量"
示例文件:
Mustard 6
Apple 4
Mustard 2
输出应为:
Mustard 8
Apple 4
订单没关系,可能是:
Apple 4
Mustard 8
文件/输入将以正确的格式,第二个字段为一个数字(可能为负)
仅使用sh shell脚本,没有尴尬,python,perl等。
我需要用cat" $@" | ...
启动代码到目前为止我拥有的东西:
cat "$@" | while read line
do
如果第一行上的第一个字=第二行上的第一个单词,请添加$ 2并删除该行,请重复所有行
done
我不确定在循环之间如何实现,我正在考虑一个关联数组,我几乎可以肯定这就是我所需要的。
任何帮助将不胜感激!
如果我们可以使用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] } }'