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<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?