ascii valor em bash / awk

2

eu tenho uma dúvida, eu sei que com esse comando, ele imprime o valor de um caractere baseado na tabela Ascii:

printf "%d\n" "'a" ##prints 97

Mas eu me pergunto como posso fazer o meu programa me mostrar o valor ascii de uma palavra, alguém pode me dizer se é possível, ou como faço para somar o valor de cada letra para ter o resultado do valor da palavra formado pela soma das letras?

    
por Jose Manuel Alarcon 31.10.2014 / 15:25

2 respostas

1

Se você puder respeitar o python, um script simples exibirá os valores ASCII dos caracteres:

Crie um script (chame-o por exemplo ascii.py)

#!/usr/bin/python
import fileinput
for line in fileinput.input():
    for c in line:
        print ord(c)

então chame o script assim:

echo "hello" | ascii.py

Isso pode ser facilmente modificado para valores ASCII totais.

    
por 31.10.2014 / 16:23
0

Isso se reduz ao problema de iterar as letras de uma palavra, o que não é trivial no bash. Minha abordagem é horrivelmente hacky, mas parece funcionar:

#!/bin/bash
WORD="$1"
REGEXP='';
ASCIISUM=0
while true; do
        LETTER=$(echo "$WORD" | sed "s/$REGEXP\(.\).*//")
        test "$LETTER" == "$WORD" && break;
        ASCII=$(printf '%d' "'$LETTER")
        echo "Adding '$LETTER': $ASCII"
        ASCIISUM=$(($ASCIISUM+$ASCII))
        REGEXP=".$REGEXP"
done
echo "Sum of ASCII values of '$WORD': $ASCIISUM"

Salvar em, por exemplo asciisum.sh e ligue com /path/to/asciisum.sh "word"

Editar:

Algumas palavras de explicação:

  • REGEXP é usado para manter uma expressão regular de períodos, exatamente um para cada letra que passa - isso corresponde às letras antes da que eu quero.
  • Usando sed I, agora filtrarei essas cartas já concluídas e todas as letras após a atual, deixando apenas a letra atual
  • Se meu regexp não for mais compatível (ou seja, o WORD não é alterado por sed ), o loop está quebrado
  • A partir daí é fácil: Calcular o código de letras ASCII e adicionar à soma
por 31.10.2014 / 15:49