
Ich habe eine Kopie einer 4,09 GB großen Wortliste/eines Wörterbuchs crackstation.txt
. Im Moment sind die Wörter und Zahlen in der üblichen Reihenfolge angeordnet:
0123456789aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStT uUvVwWxXyYzZ
Wie ändere ich die Reihenfolge etwa so:
tTaAsShHwWiIoObBmMfFcCdDpPnNeEgGrRyYuUvVjJkKqQzZxX 1023985467
Diese Sequenz gibt die Anfangsbuchstaben englischer Wörter in der Reihenfolge ihrer Popularität an, vom beliebtesten (links) bis zum am wenigsten beliebten (rechts).
Antwort1
Mit einigen Tools wie grep, sed, awk und sort können Sie einige Antworten implementieren vondiese andere Site. Dazu gehören (wenn Sie b, dann d und dann normalerweise alles andere wollten):
Ziehen Sie die Zeilen in der gewünschten Reihenfolge heraus, beginnend mit der ersten, dann der zweiten usw.“
grep '^b' myfile > outfile
grep '^d' myfile >> outfile
grep -v '^b' myfile | grep -v '^d' | sort >> outfile
Fügen Sie zuerst Ihren benutzerdefinierten „Sortierschlüssel“ hinzu, sortieren Sie dann und entfernen Sie ihn später:
sed -e 's/^b/0&/' -e t -e 's/^d/1&/' -e 't' -e 's/^/2/' |
sort |
sed 's/^.//'
Am einfachsten scheint es zu sein:
Verwenden Sie eine Sprache wie Perl, Python oder Ruby, mit der Sie problemlos eine benutzerdefinierte Sortierfunktion angeben können.
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))'
Oder versuchen Sie es mit awk (keine Erklärung angegeben, Ihre Ergebnisse können abweichen):
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] } }'