我需要使用 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