ascii значення в bash / awk


2

у мене є сумніви, я знаю, що за допомогою цієї команди, вона друкує значення символу на основі таблиці Ascii:

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

Але мені цікаво, як я можу зробити мою програму показувати мені ascii значення слова, чи може хто-небудь сказати мені, якщо це можливо, або як я додати значення кожного листа, щоб мати результат значення слова, утвореного сума листів?


1
The ascii значення слова не існує, тільки для символу. Ви дійсно можете додати значення ascii символів з цього слова. Але це не буде унікальним (наприклад cat і act ). Ви також можете сказати нам, чому ви цього хочете, так що ми краще розуміємо, і, можливо, ми можемо запропонувати можливі альтернативи (якась контрольна сума може бути?).
FredP

Те, що я повинен зробити, це тип пошуку анаграм, але мені потрібно зробити це за допомогою значень Ascii, читання вихідного слова з анаграмою оригіналу, і порівняння ascii значення оригіналу і значення анаграми, якщо вони рівний, тоді він найбільше показує, що це дійсно анаграма оригіналу, якщо вони не рівні, тоді ігноруйте це слово, я не знаю, якщо ви отримаєте це ха-ха
Jose Manuel Alarcon

1
Уявіть собі ці "слова" (неіснуючі, але тільки для зустрічного прикладу): az і by, вони мають однакову суму ascii, але не є анаграмами. Вам потрібен інший підхід.
FredP

@FredP, я думаю, що домашнє завдання ОП полягає в тому, щоб використовувати такі "абстрактні анаграми", де az і by насправді можна вважати анаграмами.
Eugen Rieck

@EugenRieck Цікаво, що ви згадуєте домашнє завдання, я підозрював, що також ... Якщо ваша відповідь не підходить, я пропоную сортування символів, перш ніж порівнювати слова ... але я не буду писати готові використовувати фрагмент: - \ t
FredP

Відповіді:


1

Якщо ви можете дотримуватися python, простий скрипт відображатиме символи ASCII:

Створіть скрипт (назвіть його, наприклад, ascii.py)

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

потім викликати сценарій таким чином:

echo "hello" | ascii.py

Це можна легко змінити до загальних значень ASCII.


0

Це зводиться до проблеми ітерації над буквами слова, яка не є тривіальною в bash. Мій підхід є жахливим, але, здається, працює:

#!/bin/bash
WORD="$1"
REGEXP='';
ASCIISUM=0
while true; do
        LETTER=$(echo "$WORD" | sed "s/$REGEXP\(.\).*/\1/")
        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"

Зберегти в напр. asciisum.sh і зателефонувати з /path/to/asciisum.sh "word"

Редагувати:

Деякі слова пояснення:

  • REGEXP використовується для збереження регулярного вираження періодів, рівно по одному для кожної пропущеної букви - це збігається з буквами перед тим, що я хочу.
  • Використання sed Зараз я відфільтровую ці вже зроблені листи і кожну літеру після поточної, залишивши лише поточний лист
  • Якщо мій регулярний вираз більше не збігається (тобто WORD не змінився sed ) петля порушена
  • Звідси легко: розрахуйте код ASCII листа і додайте до суми

Я не впевнений, що це те, що фактично потребує ОП, від його відповіді на мій коментар з проханням отримати більше інформації.
FredP

Переглянути мій коментар до вашого коментаря ... ;-)
Eugen Rieck
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.