按类别添加数量的Bash脚本
我需要一个按类别添加数量的bash脚本的帮助 输入行和输出行的形式为“类别”“数量” 示例文件:按类别添加数量的Bash脚本,bash,shell,Bash,Shell,我需要一个按类别添加数量的bash脚本的帮助 输入行和输出行的形式为“类别”“数量” 示例文件: Mustard 6 Apple 4 Mustard 2 输出应为: Mustard 8 Apple 4 顺序不重要,可能是: Apple 4 Mustard 8 文件/输入格式正确,第二个字段为数字(可能为负数) 仅使用sh shell脚本,不使用awk、python、perl等 我需要以cat“$@”|开始代码 到目前为止,我所拥有的: cat "$@" | while read line
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循环之间实现,我正在考虑一个关联数组,我几乎可以肯定这就是我所需要的
感谢您的帮助 如果我们可以使用
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] } }'
有没有一种不用awk的方法?我被要求使用cat“$@”来开始并用其他东西进行管道连接。
awk
很容易适应cat“$@”
的要求。您是否也被要求不要使用awk?我相信是的,awk是特别提到要避免的。我正在上一门介绍课程,所以我们还没有到awk,只是一些基本的东西。我明白我需要做什么:当逐行读取文件时,for循环检查行并检查重复项,然后添加$2的值,我只是不知道如何实现它。添加一个!在数组前面输出所有的索引?@NickGong是的。如果没有它,它将返回金额,而不是类别。