Soma dos números usando o awk

2

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
    
por Radu Teodora 10.05.2017 / 17:22

3 respostas

5

Como você insiste em fazer isso com awk :

awk -F '' '{ sum = 0; for(i=1; i<=NF; i++) sum += $i; print "sum " sum }' file
    
por 10.05.2017 / 17:27
2

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.

    
por 10.05.2017 / 18:03
1

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
    
por 10.05.2017 / 21:45

Tags