在终端内排序 Markdown 表格

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

原文链接:https://christiantietze.de/posts/2017/05/s...

正文

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
Former WinForm and PHP engineer. Now prefer Golang and Rust, and mainly working on DevSecOps and Kubernetes.
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!