В качестве символьного перевода, вероятно, проще всего использовать sed
, а не awk
. Следующий сценарий, например, выполнит перевод на свиной латынь для английских слов без дефиса:
#!/bin/bash
C=bcdfghjklmnpqrstvwxyBCDFGHJKLMNPQRSTVWXY
V=aoueiAOUEI
while read -r line ; do
echo $(echo "$line" | sed 's/\s\+/\n/g' |
sed "s/\b\([$V]\)\(\w*\)/\1\2-yay/;tx
s/\b\([$C]\)\(\w\+\)/\2-\1ay/;:x" )
done
Он включает в себя а) построчную обработку ввода, б) временное разбиение каждой строки на несколько строк по пробелам и в) переводить каждое слово как один из двух паттернов: гласная, за которой следует ноль или более букв, что означает окончание «-йай», или согласный звук, за которым следует одна или несколько букв, что переводится в эти буквы, за которыми следует тире, согласный и «ай».Затем переведенные слова с пунктуацией объединяются в одну строку с помощью вложенной команды $ (...)
и выводятся эхом.