54 lines
1.2 KiB
Awk
54 lines
1.2 KiB
Awk
# syntax: GAWK -f HEX_WORDS.AWK unixdict.txt
|
|
{ nf += NF
|
|
if (length($1) >= 4) {
|
|
if ($0 ~ /^[a-fA-F]{4,}$/) {
|
|
base10 = hex2dec($1)
|
|
dr = digital_root(base10)
|
|
arr[dr " " $1] = base10
|
|
}
|
|
}
|
|
}
|
|
ENDFILE {
|
|
printf("%s: %d records, %d fields\n\n",FILENAME,FNR,nf)
|
|
}
|
|
END {
|
|
PROCINFO["sorted_in"] = "@ind_str_asc"
|
|
for (i in arr) {
|
|
printf("%-8s %10d \n",i,arr[i])
|
|
count1++
|
|
}
|
|
printf("Found %d hex words\n\n",count1)
|
|
PROCINFO["sorted_in"] = "@val_num_desc"
|
|
for (i in arr) {
|
|
if (distinct(substr(i,3)) >= 4) {
|
|
printf("%-8s %10d \n",i,arr[i])
|
|
count2++
|
|
}
|
|
}
|
|
printf("Found %d hex words with 4 or more distinct\n\n",count2)
|
|
exit(0)
|
|
}
|
|
function digital_root(n, i,sum) {
|
|
while (1) {
|
|
sum = 0
|
|
for (i=1; i<=length(n); i++) {
|
|
sum += substr(n,i,1)
|
|
}
|
|
if (sum < 10) {
|
|
break
|
|
}
|
|
n = sum
|
|
}
|
|
return(sum)
|
|
}
|
|
function distinct(str, arr,i) {
|
|
for (i=1; i<=length(str); i++) {
|
|
arr[substr(str,i,1)]++
|
|
}
|
|
return(length(arr))
|
|
}
|
|
function hex2dec(s, num) {
|
|
num = index("0123456789ABCDEF",toupper(substr(s,length(s)))) - 1
|
|
sub(/.$/,"",s)
|
|
return num + (length(s) ? 16*hex2dec(s) : 0)
|
|
}
|