序
最近新项目写 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,期待接下来的挑战,给自己加油!
九月,你好。