如何给文本行排序
Emacs 内置的函数可以很方便地对文本排序。假如有以下两列文本:
1 x 3 xxx 20 xxxxxxxxxxxxxxxxxxxx 4 xxxx 2 xx 10 xxxxxxxxxx 9 xxxxxxxxx
现在要按第一列的数字进行排序:
- 标记这段文本
- M-x sort-numeric-fields
结果如下:
1 x 2 xx 3 xxx 4 xxxx 9 xxxxxxxxx 10 xxxxxxxxxx 20 xxxxxxxxxxxxxxxxxxxx
如果要逆序,标记结果文本:
M-x reverse-region
结果如下:
20 xxxxxxxxxxxxxxxxxxxx 10 xxxxxxxxxx 9 xxxxxxxxx 4 xxxx 3 xxx 2 xx 1 x
Emacs 还有另一个按 ASCII 码排序的函数 sort-lines,注意它不是按数字来排序,比如我们把刚才的文本排下序,结果如下:
1 x 10 xxxxxxxxxx 2 xx 20 xxxxxxxxxxxxxxxxxxxx 3 xxx 4 xxxx 9 xxxxxxxxx
但这个函数可以很方便地用来排序日期,比如我统计了一些数据如下:
2014-09-23 10 2014-09-24 85 2014-09-25 146 2014-10-01 140 2014-09-26 161 2014-10-02 13 2014-09-27 14 2014-10-03 1 2014-09-28 16 2014-10-04 1370 2014-09-29 182 2014-09-30 14 2014-10-05 136 2014-10-06 141144 2014-09-20 1215 2014-10-07 135 2014-09-21 45 2014-10-08 144 2014-09-22 5419 2014-10-09 5199 2014-10-10 1591
为了方便展示,现在需要对它们按日期排序:
- 标记这段文本
- M-x sort-lines
结果如下:
2014-09-20 1215 2014-09-21 45 2014-09-22 5419 2014-09-23 10 2014-09-24 85 2014-09-25 146 2014-09-26 161 2014-09-27 14 2014-09-28 16 2014-09-29 182 2014-09-30 14 2014-10-01 140 2014-10-02 13 2014-10-03 1 2014-10-04 1370 2014-10-05 136 2014-10-06 141144 2014-10-07 135 2014-10-08 144 2014-10-09 5199 2014-10-10 1591
如果要降序:
C-u M-x sort-lines
结果如下:
2014-10-10 1591 2014-10-09 5199 2014-10-08 144 2014-10-07 135 2014-10-06 141144 2014-10-05 136 2014-10-04 1370 2014-10-03 1 2014-10-02 13 2014-10-01 140 2014-09-30 14 2014-09-29 182 2014-09-28 16 2014-09-27 14 2014-09-26 161 2014-09-25 146 2014-09-24 85 2014-09-23 10 2014-09-22 5419 2014-09-21 45 2014-09-20 121
更多参考