如何在linux shell中进行求和
我知道如何在一行中求和,我可以使用awk。但是如果情况不同,我应该怎么做?比如说,如何在linux shell中进行求和,linux,bash,Linux,Bash,我知道如何在一行中求和,我可以使用awk。但是如果情况不同,我应该怎么做?比如说, orange 2000 orange 1000 orange 1500 apple 900 apple 1100 peach 1500 peach 800 peach 1200 我想分别得到每种水果的总数。您也可以使用awk通过使用关联数组: pax> echo 'orange 2000 orange 1000 orange 150
orange 2000
orange 1000
orange 1500
apple 900
apple 1100
peach 1500
peach 800
peach 1200
我想分别得到每种水果的总数。您也可以使用
awk
通过使用关联数组:
pax> echo 'orange 2000
orange 1000
orange 1500
apple 900
apple 1100
peach 1500
peach 800
peach 1200' | awk 'NF>=2{sum[$1]+=$2}END{for(i in sum){print i" "sum[i]}}'
orange 4500
apple 2000
peach 3500
详细查看脚本:
NF >= 2 { # Want at least two fields
sum[$1] += $2 # For each line, add to sum for that key
}
END { # After all lines processed.
for (i in sum) { # Process each key in sum array
print i" "sum[i] # Output key and sum
}
}
另一种方法是在bash中使用switch case。即使果实不整齐,这也会起作用
#!/bin/bash
file=fruits.txt
while read -r line
do
fruit=`echo $line | awk '{ print $1 }'`
case "$fruit" in
orange )
value=`echo $line | awk '{ print $2 }'`
val_or=`expr $val_or + $value`
;;
apple )
value=`echo $line | awk '{ print $2 }'`
val_ap=`expr $val_ap + $value`
;;
peach )
value=`echo $line | awk '{ print $2 }'`
val_pe=`expr $val_pe + $value`
;;
esac
done < $file
echo "orange: $val_or\napple: $val_ap\npeach: $val_pe\n"
#/bin/bash
file=fruits.txt
而read-r行
做
水果=`echo$line | awk'{print$1}'`
大写“$FROUT”
(橙色)
value=`echo$line | awk'{print$2}'`
val_or=`expr$val_or+$value`
;;
(苹果)
value=`echo$line | awk'{print$2}'`
val_ap=`expr$val_ap+$value`
;;
桃子)
value=`echo$line | awk'{print$2}'`
val_pe=`expr$val_pe+$value`
;;
以撒
完成<$file
echo“橙色:$val\u或\napple:$val\u ap\n每个:$val\u pe\n”
GNU:
非常感谢。我在shell中尝试了你的命令,并成功地实现了我的目标。我需要一些时间来理解关联数组。
datamash -W -g1 sum 2 < fruit
orange 4500
apple 2000
peach 3500