Como você insiste em fazer isso com awk
:
awk -F '' '{ sum = 0; for(i=1; i<=NF; i++) sum += $i; print "sum " sum }' file
Eu preciso fazer as somas dos números de palavras alfanuméricas de um arquivo, USANDO AWK.
ex: no arquivo que tenho:
rtig0143
almn3921
ptne2218
o resultado deve ser
sum 8
sum 15
sum 13
Como você insiste em fazer isso com awk
:
awk -F '' '{ sum = 0; for(i=1; i<=NF; i++) sum += $i; print "sum " sum }' file
POSIXly:
awk '{for (i = sum = 0; i++ < length;) s += substr($0, i, 1); print "sum", s}'
O mesmo princípio da resposta de Sato Katsura : estamos adicionando todos os caracteres na linha; quando convertido de string para number, os caracteres que são dígitos decimais são convertidos para o valor do dígito, enquanto os outros são convertidos para 0.
Remover os caracteres não dígitos (com gsub(/[^0-9]/, "")
ou pré-processamento com tr -cd '0-9\n'
) antecipadamente pode melhorar o desempenho.
Python 3.x abordagem (apenas a solução alternativa):
sum_digits.py
script:
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()))
Uso :
python3 sum_digits.py yourfile
A saída:
sum 8
sum 15
sum 13
Tags awk