DOS HASAN
DOS HASAN

Reputation: 333

how to use values with sed in shell scripting?

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 .

Upvotes: 0

Views: 127

Answers (2)

glenn jackman
glenn jackman

Reputation: 246807

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.

Upvotes: 2

markp-fuso
markp-fuso

Reputation: 34244

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

Upvotes: 0

Related Questions