
我有一份 4.09 GB 的單字表/字典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] } }'