Как оптимизировать словарь/список слов?

Как оптимизировать словарь/список слов?

У меня есть копия словаря/словаря на 4,09 ГБ crackstation.txt. Сейчас слова и числа расположены в обычном порядке:

0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStT uUvVwWxXyYzZ

Как мне изменить порядок следующим образом:

tTaAsShHwWiIoObBmMfFcCdDpPnNeEgGrRyYuUvVjJkKqQzZxX 1023985467

Эта последовательность дает первые буквы английских слов в порядке популярности, от самых популярных (слева) до наименее популярных (справа).

решение1

Используя некоторые инструменты, такие как grep, sed, awk и sort, вы можете реализовать некоторые ответы изэтот другой сайт. Они включают в себя (если вы хотели b, то d, а затем все остальное, как обычно):

Вытяните линии в желаемом порядке, начиная с первой, затем вторую и т.д.

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

Сначала добавьте свой пользовательский «ключ сортировки», затем выполните сортировку, а затем удалите его:

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

Самый простой вариант выглядит так:

используйте такой язык, как Perl, Python или Ruby, который позволяет легко задать пользовательскую функцию сортировки.

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))'

Или попробуйте awk (объяснения не даны, 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] } }'

Связанный контент