Articles that updated a long time ago may have already lost the technical merit. Please kindly pay attention while reading.

最近新项目写 README,在编排实体命名协定中英对照的时候,有使用到 Markdown 的表格。那么如何按照某列的字母顺序排序 Markdown 表格呢?实际上,一条 Shell 命令就足以解决。请看大佬的实现。

正文

TableFlip 目前还无法根据列排序表格. 所以我们不得不使用其他方法,比如 Shell 或者 Terminal 命令.

首先,我们假设你的 Markdown 表格由一个两行的表头开始,并且每行开头都有管道操作符(|),就像这样:

| a | b | c | d |
| - | - | - | - |
| 1 | 2 | 3 | 4 |
| 9 | 1 | 2 | 3 |
| 3 | 4 | 5 | 6 |

接下来,你便可以使用如下命令,按照第三列(c 列)对表格进行排序:

tail -n +3 table.md | sort --field-separator=\| --key=4

解释:

  • tail 命令读取文件的尾部;tail -n +3 从尾部开始读取一个文件,直到第三行结束;排除了前两行,也就是表头。
  • sort 命令排序文本输入;--field-separator=\| 指定排序命令使用管道分隔符(|)而非 tab 作为列分隔符;--key=4 设置根据第 4 列进行排序(注意,此处实际上是第 3 列;因为如果表格行由列分隔符也就是管道操作符开头,那它也会被算进排序列里)。

输出为:

| 9 | 1 | 2 | 3 |
| 1 | 2 | 3 | 4 |
| 3 | 4 | 5 | 6 |

你可以通过使用 head 合并 tail 把表头重新添加回去,head 命令将会输出文件的开头两行。

head -n 2 table.md && tail -n +3 table.md | sort --field-separator=\| --key=4

就是这样:

| a | b | c | d |
| - | - | - | - |
| 9 | 1 | 2 | 3 |
| 1 | 2 | 3 | 4 |
| 3 | 4 | 5 | 6 |

最后,只需要使用 > sorted_file.md 把输出重定向到一个新文件即可保存:

(head -n 2 table.md && tail -n +3 table.md | sort --field-separator=\| --key=4) > sorted_table.md

原文链接:https://christiantietze.de/posts/2017/05/sort-markdown-tables-shell/

碎碎念

印象中,七月结束也有过感叹。时间飞快,马上到了八月底,一转眼就到了九月开学(和女朋友见面)的日子。

emmmm,这个月做个简单总结。

上半个月在忙着使用七月底封装的 支付宝 SDK 把公司项目集成到支付宝。

下半个月为即将开始的新项目做准备工作,所以才有了近期一些关于 Laravel 的博文;新项目既然老板信任地丢给我做后端架构,那就毫不犹豫地采用社区活跃、代码优雅、轮子多的当红炸子鸡 Laravel 啦。

另外考虑到 Laravel 在优雅路上越走越远,由于并发性能也不容忽视,所以最近可能要开关于 Swoole 的坑了。

之前一直自己玩 Swoole ,写一些长链接的小项目和小玩具,这是第一次尝试把 Swoole 大规模用在商业项目里,想想还是有点小激动 /斜眼笑。

2333,期待接下来的挑战,给自己加油!

九月,你好。