Como otimizar uma lista de dicionários / palavras?

0

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

0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStT uUvVwWxXyYzZ

Como reorganizo o pedido para algo como:

tTaAsShHwWiIoObBmMfFcCdDpPnNeEgGrRyYuUvVjJkKqQzZxX 1023985467

Esta sequência fornece as primeiras letras de palavras inglesas em ordem de popularidade, da mais popular (esquerda) para a menos popular (direita)

    
por OKCarl 14.04.2016 / 21:22

1 resposta

1

Usando algumas ferramentas como grep, sed, awk, & você pode implementar algumas respostas de este outro site . Eles incluem (se você quisesse b então tudo o mais normalmente):

Retire as linhas na ordem desejada, começando com a primeira, depois a segunda, etc. "

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

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

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 a language such as Perl, Python or Ruby that lets you easily specify a custom sort function.

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 o 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] } }'
    
por 14.04.2016 / 22:53