我想写一个报告总和的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。
答案 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 )