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)
小智 10
awk -F= '{sum+=$2};END{print sum}'
Run Code Online (Sandbox Code Playgroud)
另一个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)