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.