bash脚本对数值输出求和

时间:2011-04-21 17:01:57

标签: bash sum

我想写一个报告总和的Bash脚本。我从20个文本文件开始,其中包含文本“LOC:54”(“54”可以是任何整数)。以下是使用grep搜索此行的结果:

# grep LOC *
ceil.c: * LOC: 38
count_newlines.c: * LOC: 28
even.c: * LOC: 35
every_product.c: * LOC: 48
expand_factors.c: * LOC: 54
factor.c: * LOC: 41
fibonacci.c: * LOC: 49
get_element.c: * LOC: 37
is_composite.c: * LOC: 43
isprime.c: * LOC: 36
largest.c: * LOC: 37
max_product.c: * LOC: 68
mult_list.c: * LOC: 38
nlist.c: * LOC: 37
palindrome.c: * LOC: 72
prime_factors.c: * LOC: 57
remove_dups.c: * LOC: 50
select_products.c: * LOC: 36
square_list.c: * LOC: 31
sum_list.c: * LOC: 38

我可以做些什么来将数字信息拉到一起产生一个数字,即上述数字的总和?我相信在上面的例子中它将是873。

5 个答案:

答案 0 :(得分:5)

awk -F: '/LOC/ {sum += $3;} END {print sum;}' InputFileName

答案 1 :(得分:1)

这是一个纯粹的bash脚本。虽然

不适用于浮点数
#!/bin/bash


shopt -s nullglob
declare -i sum=0
for file in file*
do
    if [ -f "$file" ];then
    while read -r line
    do
        case "$line" in
            *"LOC: "* )
            [[ $line =~ "LOC: ([0-9]+)" ]]
            ((sum+=${BASH_REMATCH[1]}))
            ;;
        esac
    done < "$file"
    fi
done
echo "Sum: $sum"

答案 2 :(得分:0)

awk脚本将添加包含LOC:的行,并以数字结尾:

 grep LOC * | awk 'BEGIN { FS= "LOC: "; sum = 0 } NF==2 && /[0-9]+$/ { sum+=$2 } END { print sum }'

答案 3 :(得分:0)

Pure Bash。以下脚本 sum.sh 执行此操作:

declare sum=0
while read -a line ; do
  (( sum += ${line[@]: -1} ))               # sum up last elements
done < <(grep --exclude=*.sh LOC *)         # exclude script files
echo -e "sum = $sum"

答案 4 :(得分:0)

只是一个练习,而不是最好的解决方案

set -- $(awk '/LOC:/ {print $NF}' filename)
IFS='+'
answer=$( echo "$*" | bc )