#bash #shell
#удар #ракушка
Вопрос:
я пытаюсь написать сценарий оболочки на алфавитном языке ,
у меня есть 5 таких параметров
$alphametic 5790813 BEAR RARE ERE RHYME
получить
ABEHMRY -gt; 5790813
я попробовал это :
#!/bin/bash echo "$2 $3 $4 $5" | sed 's/ //g ' | sed 's/./amp;n/g' | sort -n | sed '/^$/d' | uniq -i gt; testing paste -sd '' testing gt; testing2 sed "s|^(.*)$|1 -gt; ${1}|" testing2
но я получаю ошибку (с последней командой sed
), я не знаю, в чем проблема .
Комментарии:
1.
but i get error
какая ошибка?2. @DOSHASAN : исправлен мой ответ
Ответ №1:
Другой подход:
chars=$(printf '%s' "${@:2}" | fold -w1 | sort -u | paste -sd '') echo "$chars -gt; $1"
сортировка здесь -n
не имеет смысла: это буквы, а не цифры.
Ответ №2:
Одна идея, используемая awk
для всего этого:
arg1="$1" shift others="$@" awk -v arg1="${arg1}" -v others="${others}" ' BEGIN { n=split(others,arr,"") # split into into array of single characters for (i=1;ilt;=n;i ) # loop through indices of arr[] array letters[arr[i]] # assign characters as indices of letters[] array; eliminates duplicates delete letters[" "] # delete array index for "lt;spacegt;" PROCINFO["sorted_in"]="@ind_str_asc" # sort array by index for (i in letters) # loop through indices printf "%s", i # print index to stdout printf " -gt; %sn", arg1 # finish off line with final string } '
ПРИМЕЧАНИЕ: требуется GNU awk
для PROCINFO["sorted_in"]
(для сортировки индексов letters[]
массива)
Это порождает:
ABEHMRY -gt; 5790813