![文件行的增值](https://linux22.com/image/153291/%E6%96%87%E4%BB%B6%E8%A1%8C%E7%9A%84%E5%A2%9E%E5%80%BC.png)
假设我有一个文件,例如:
apple | red | 2
apple | green | 3
orange | yellow | 3
apple | yellow | 1
现在我需要以下输出(无论颜色值如何,都应该对第三个数字进行求和):
apple | red | 6
orange | yellow | 3
我尝试了如下所示:
tail -n 4 $firstfile| while IFS=, read -r f2col1 f2col2
do
match1=$(echo $f2col2)
fruit1=$(echo $f2col1)
if [ "${fruit1}" == "${fruit1}" ]; then
match3=`expr ${match3} + ${match1}`
第二次添加后似乎不对。
有人能给我更好的主意吗?
答案1
您可以使用 awk 来完成整个操作
awk '{ arr[$1]+=$3; } END {for ( i in arr ) printf "%s | %d\n",i,arr[i];}'
这是每个部分的作用
{ arr[$1]+=$3; }
将值添加到以水果名称为键的关联数组中- 最后以
{for ( i in arr ) printf "%s|%d\n",i,arr[i];}
您需要的格式打印数组的每个成员