让我们看一个包含以下内容的示例文件,一个包含项目及其价格的费用报告:
$ cat file
Item1,200
Item2,500
Item345,900
Item20896,800
Item111,600
现在,一位朋友向我发起挑战,要求我获得总价所有项目中——但是没有使用awk
。那可能吗?
答案1
使用 GNU bash:
while IFS="," read -r item number; do ((sum=$sum+$number)); done < file; echo $sum
输出:
3000
答案2
我真的不明白你为什么不想使用,awk
但当然,这里有一些替代方案:
珀尔 (蒂姆托迪)
$ perl -F, -lane '$k+=$F[1];}{print $k' file 3000 $ perl -lne '/,(\d+)/;$k+=$1;}{print $k' file 3000 $ perl -F, -lane '$k+=$F[1];END{print $k}' file 3000
经典的 *nix 工具
$ cut -d, -f2 file | tr '\n' '+' | sed 's/+$/\n/' | bc 3000 $ cut -d, -f2 file | paste -d'+' - - - - - | bc 3000
现代 bourne 系列 shell(例如 bash、ksh、zsh)
$ k=0; while IFS=, read a num; do ((k+=num)); done < file ; echo "$k"; 3000
POSIX shell
k=0; while IFS=, read a num; do k=$((k+num)); done < file ; echo "$k";