使用 awk 求数字总和

使用 awk 求数字总和

我需要使用 AWK 对文件中的字母数字单词进行数字求和。

例如:在我的文件中:

rtig0143
almn3921
ptne2218

结果应该是

sum 8
sum 15
sum 13

答案1

既然你坚持这样做awk

awk -F '' '{ sum = 0; for(i=1; i<=NF; i++) sum += $i; print "sum " sum }' file

答案2

POSIXly:

awk '{for (i = sum = 0; i++ < length;) s += substr($0, i, 1); print "sum", s}'

原理与佐藤桂的回答:我们将行中的所有字符相加;从字符串转换为数字时,十进制数字的字符将转换为数字的值,而其他字符将转换为0。

事先删除非数字字符(使用gsub(/[^0-9]/, "")或使用 进行预处理tr -cd '0-9\n')可能会提高性能。

答案3

Python3.x 方法(只是替代解决方案):

sum_digits.py脚本:

import sys
with open(sys.argv[1], 'r') as f:
    for l in f:
        print("sum", sum(int(d) for d in l if d.isdigit()))

用法

python3 sum_digits.py yourfile

输出:

sum 8
sum 15
sum 13

相关内容