¿Cómo optimizar un diccionario/lista de palabras?

¿Cómo optimizar un diccionario/lista de palabras?

Tengo una copia de una lista de palabras/diccionario de 4,09 GB crackstation.txt. Ahora las palabras y los números están ordenados en el orden habitual:

0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStT uUvVwWxXyYzZ

¿Cómo reorganizo el orden a algo como:

tTaAsShHwWiIoObBmMfFcCdDpPnNeEgGrRyYuUvVjJkKqQzZxX 1023985467

Esta secuencia muestra las primeras letras de las palabras en inglés en orden de popularidad, desde la más popular (izquierda) hasta la menos popular (derecha).

Respuesta1

Usando algunas herramientas como grep, sed, awk y sort, puedes implementar algunas respuestas deeste otro sitio. Incluyen (si querías b, luego d, entonces todo lo demás normalmente):

Saque las líneas en el orden deseado, comenzando con la primera, luego la segunda, etc."

grep '^b' myfile > outfile
grep '^d' myfile >> outfile
grep -v '^b' myfile | grep -v '^d' | sort >> outfile

Primero agregue su "clave de clasificación" personalizada, luego ordénela y luego elimínela:

sed -e 's/^b/0&/' -e t -e 's/^d/1&/' -e 't' -e 's/^/2/' |
sort |
sed 's/^.//'

Lo más fácil parece ser:

utilice un lenguaje como Perl, Python o Ruby que le permita especificar fácilmente una función de clasificación personalizada.

perl -e 'print sort {($b =~ /^[bd]/) - ($a =~ /^[bd]/) ||
     $a cmp $b} <>'
python -c 'import sys; sys.stdout.write(sorted(sys.stdin.readlines(), key=lambda s: (0 if s[0]=="b" else 1 if s[0]=="d" else 2), s))'

O intente con awk (no se proporciona ninguna explicación, YMMV):

sort myfile | awk '$0 ~ /^b/ || $0 ~ /^d/ {print} $0 !~ /^b/ && $0 !~ /^d/ { a[f++] = $0 } END { for (word = 0; word < f; word++) { print a[word] } }'

información relacionada