如何快速求和文件中的所有数字?

Jac*_*ack 16 awk text-processing numeric-data

每行包含一列中的文本和数字。我需要计算每一行中数字的总和。我怎样才能做到这一点?谢谢

example.log 包含:

time=31sec
time=192sec
time=18sec
time=543sec
Run Code Online (Sandbox Code Playgroud)

答案应该是784

cuo*_*glm 18

如果您的grep支持-o选项,您可以尝试:

$ grep -o '[[:digit:]]*' file | paste -sd+ - | bc
784
Run Code Online (Sandbox Code Playgroud)

POSIXly:

$ printf %d\\n "$(( $(tr -cs 0-9 '[\n*]' <file | paste -sd+ -) ))"
784
Run Code Online (Sandbox Code Playgroud)


Jan*_*nis 16

使用较新版本 (4.x) 的 GNU awk

awk 'BEGIN {FPAT="[0-9]+"}{s+=$1}END{print s}'
Run Code Online (Sandbox Code Playgroud)

与其他人一起awk尝试:

awk -F '[a-z=]*' '{s+=$2}END{print s}'
Run Code Online (Sandbox Code Playgroud)

  • 如果 `s` 为空,你需要 `s+0`,它将打印 `0` 而不是空。 (4认同)

小智 10

awk -F= '{sum+=$2};END{print sum}'
Run Code Online (Sandbox Code Playgroud)

  • @slm,这是一个新用户,拥有最佳答案之一(从技术角度来看),他得到了两个反对票和一个负面评论。不是很热情的欢迎。 (4认同)
  • 我们更喜欢长格式的答案。你能详细说明这是如何工作的吗? (2认同)
  • @slm,这个答案并不比这里的其他答案多或少冗长,而且是不言自明的。它还具有处理输入的优点,例如`time=1.4e5sec` (2认同)

Sté*_*las 7

另一个GNU awk

awk -v RS='[0-9]+' '{n+=RT};END{print n}'
Run Code Online (Sandbox Code Playgroud)

一个perl一个:

perl -lne'$n+=$_ for/\d+/g}{print$n'
Run Code Online (Sandbox Code Playgroud)

一个POSIX:

tr -cs 0-9 '[\n*]' | grep . | paste -sd + - | bc
Run Code Online (Sandbox Code Playgroud)


小智 6

sed 's/=/ /' file | awk '{ sum+=$2 } END { print sum}'
Run Code Online (Sandbox Code Playgroud)