【问题标题】:bc: get the sum of a list of numbc:获取num列表的总和
【发布时间】:2012-05-25 15:38:33
【问题描述】:
杰克 10 Ĵ 10 一个 20 卢卡 20 公元前 U 20

我想得到这些数字的总和:10+10+20+20+20 = 80

但我无法使用cat input|cut -d " " -f 3 获取数字,我该怎么做?

【问题讨论】:

  • 如果你应该使用cut,数字似乎从第8列开始;这应该是一个让你前进的提示。你也不需要cat。您可能需要使用awk 进行求和,或使用sed 插入必要的额外字符。

标签: unix bc


【解决方案1】:

假设您的文件名为 input.txt:

echo `sed 's/[^0-9]*\([0-9]*\).*/\1+/' input.txt` '0' | bc

(我确信使用 sed 或 awk 有更优雅的方法,这只是添加终止 '0' 以使 bc 高兴的快速技巧。分别运行命令的不同部分以计算知道发生了什么)

【讨论】:

    【解决方案2】:

    你可以使用 grep + paste + bc

    $ grep -oE '[0-9]+' file
    10
    10
    20
    20
    20
    
    $ grep -oE '[0-9]+' file | paste -s -d + - 
    10+10+20+20+20
    
    $ grep -oE '[0-9]+' file | paste -s -d + - | bc
    80
    

    代替grep,你可以使用cut

    $ cut -c 8- file
    

    或者只是 awk

    $ awk '{print $NF}' file
    

    但是如果你可以使用 awk,你可以使用 awk 求和

    $ awk '{total += $NF} END { print total }' file
    

    【讨论】:

      【解决方案3】:

      您可以用 + 替换所有空格并将结果通过管道传输到 bc

      回显 "5 6 2" | sed -E -e 's/\s+/+/g' |公元前

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-21
        • 1970-01-01
        • 2021-08-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多