AWK script: decrypt text uses frequency analysis

Ez all!
I have a question how to decrypt text uses letter frequency analysis. I have code which count the letters, but what i need to do after that. Can anybody help me to write a code. VERY NEEDED! My code now:

#!/usr/bin/awk -f
BEGIN { FS="" }
{
for (i=1; i <= NF; i++) {
if ($i != " ")
letter[tolower($i)]++
}
}
END {
j = 1
for (i in letter) {
ind[j] = i
j++
}
n = asort(ind)
for (i = 1; i <= n; i++)

 printf "%s: %s\\n", ind[i], letter[ind[i]]

}

how i understand i need to sort the letter[ind[i]] and then the most bigger will be "e". But how to do that?

Don't know if this is what you want, anyway:

#!/usr/bin/awk -f
   {
   long=length($0)
   for (i=1;i<=long;i++) 
      {
      aux=substr($0,i,1)
      if ( aux != " " && aux != "" )
          letter[tolower(aux)]++
          if ( letter[tolower(aux)] > max )
              {
              max=letter[tolower(aux)] 
              max_letter=aux
              }
      }
}
END {
   print "Most used letter is:"max_letter" Ocurrences:"max
   for (item in letter) 
       print "Letter:"item" Ocurrences:"letter[item]
}

My code:
#!/usr/bin/awk -f

function swapa(arr,i,j, tmp) {
tmp=arr[i];
arr[i]=arr[j];
arr[j]=tmp;
}
function _qsort(arr,keys,i,j, k,i2,j2) {
if(j-i<1)
return

i2=i; j2=j;
# pivot, later algorithm depends on i here,
# so be careful if going to change it
k=arr[keys[i]];

while(i2<j2) {
# push i2 to the right until there is k greater element
while(i2<=j && arr[keys[i2]]<=k) i2++;
# push j2 to the left until there is k less/equal element
while(j2>=i && arr[keys[j2]]>k) j2--;

if\(i2&lt;j2\)
  swapa\(keys, i2, j2\);

}

# if i2>j then there were no elements greater than k
# this is special case where we assume k as greatest element
# and place it to the end of the list
if(i2>j) {
swapa(keys, i, j);
i2--; j2--;
}

# recurse for subarrays
_qsort(arr, keys, i, j2);
_qsort(arr, keys, i2, j);
}

function qsort(arr,keys, n,i,k) {
for(k in arr) {
keys[++i] = k
}
n=i;

_qsort(arr, keys, 1, n);

return n;
}

BEGIN { FS="" }
{

for (i=1; i <= NF; i++) {
if ($i != " ")
letter[tolower($i)]++
}
}
#END {
# j = 1
# for (i in letter) {
# ind[j] = i
# j++
# }
# n = asort(ind)
# for (i = 1; i <= n; i++)
# printf "%s: %s\n", ind[i], letter[ind[i]]

#}
END {
j = 1
for (i in letter) {
ind[j] = i
j++}
n=qsort(letter,ind);
for(i=n; i>0; --i) {

 print ind[i],letter[ind[i]];

}
}

END {
#to ="etaniosrlhdgcufm-pbyw.,v1:6kx932()-/8750qzj;][=4>+<@'#"
to="#'
@<+>4=[];jzq0578/-)(239xk6:1v,.wybp-mfcugdhlrsoinate"
j = 1
for (i in letter) {
ind[j] = i
j++}
n=qsort(letter,ind);
for(i=1; i<=NF; i++) {
letter2[ind[i]] = substr(to, i, 1)
#print ind[i],letter[ind[i]];
}

{
for (i = 1; i<=NF; i++) {
char = substr($0, i, 1)
if (match(char, "[a-zA-Z]") != 0) {
printf("%c", letter2[char])
} else {
printf("%c", char)
}
}
printf("\n")
}}
But it doesnt work so how i need, it replace the letters wrong. Can anybody help?

The letters which have the most bigger frequency must be replace by "e" and so.