如何在不使用 awk 命令的情况下将 UNIX 中特定列的所有数字相加?

如何在不使用 awk 命令的情况下将 UNIX 中特定列的所有数字相加?

让我们看一个包含以下内容的示例文件,一个包含项目及其价格的费用报告:

$ 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"; 
    

答案3

使用数字实用程序:

numsum -s, -2 file

使用数据混合:

datamash  -t, sum 2 < file

使用杰克:

cut -d, -f2 file | jq -s add

相关内容