我有一份 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] } }'