1

i am trying te write a shell script in alphametic ,

i have 5 parameters like this

$alphametic 5790813 BEAR RARE ERE RHYME

to get

ABEHMRY -> 5790813

i tried this :

  #!/bin/bash
    echo "$2 $3 $4 $5" | sed  's/ //g ' | sed 's/./&\n/g' | sort -n |  sed '/^$/d' | uniq -i > testing
    paste -sd ''  testing  > testing2 
    sed "s|^\(.*\)$|\1 -> ${1}|" testing2 

but i get error (with the last command sed), i dont know where is the problem .

1
  • 1
    but i get error what error? Commented Nov 27, 2021 at 14:24

2 Answers 2

3

Another approach:

chars=$(printf '%s' "${@:2}" | fold -w1 | sort -u | paste -sd '')
echo "$chars -> $1"

sort's -n does't make sense here: these are letters, not numbers.

Sign up to request clarification or add additional context in comments.

Comments

1

One idea using awk for the whole thing:

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;i<=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 "<space>"
        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 " -> %s\n", arg1                # finish off line with final string
      }
'

NOTE: requires GNU awk for the PROCINFO["sorted_in"] (to sort the indices of the letters[] array)

This generates:

ABEHMRY -> 5790813

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.