Como otimizar um dicionário/lista de palavras?

Como otimizar um dicionário/lista de palavras?

Eu tenho uma cópia de uma lista de palavras/dicionário de 4,09 GB crackstation.txt. Agora mesmo as palavras e os números estão organizados na ordem usual:

0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStT uUvVwWxXyYzZ

Como faço para reorganizar o pedido para algo como:

tTaAsShHwWiIoObBmMfFcCdDpPnNeEgGrRyYuUvVjJkKqQzZxX 1023985467

Esta sequência fornece as primeiras letras das palavras em inglês em ordem de popularidade, da mais popular (esquerda) à menos popular (direita)

Responder1

Usando algumas ferramentas como grep, sed, awk e sort você pode implementar algumas respostas deeste outro site. Eles incluem (se você quiser b, então d, então todo o resto normalmente):

Puxe as linhas na ordem desejada, começando pela primeira, depois pela segunda, etc.

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

Adicione sua "chave de classificação" personalizada primeiro, depois classifique e remova-a mais tarde:

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

O mais fácil parece ser:

use uma linguagem como Perl, Python ou Ruby que permite especificar facilmente uma função de classificação 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))'

Ou tente awk (nenhuma explicação dada, 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] } }'

informação relacionada