正确格式化表格输出的“Unix 方式”是什么?

正确格式化表格输出的“Unix 方式”是什么?

我正在编写一套“Unix Way”工具,其中有一组小工具可以通过管道相互连接(以及其他工具)。

问题(关于我为什么关心的更多细节如下)是这样的: 命令行输出的表格格式是否有推荐的输出格式,以便于其他标准 Unix 工具进行列化和使用?

一些背景:

我正在编写一组工具来在命令行上管理和搜索万智牌卡组。我正在尝试让这些工具更加集中,每个工具都只做一项工作。

我有一个名为 mtg-identify-set 的工具,它将集合名称作为参数,然后对集合名称进行模糊搜索,列出从最佳到最差的匹配列表:

搜索“Theros”的输出如下:

  1. ths,“theros”,100.00
  2. tths,“theros 代币”,63.15789473684200
  3. pths,“theros 促销”,63.15789473684200
  4. drk,“黑暗”,57.14285714285700
  5. aer,“以太叛乱”,52.63157894736800

因此它输出集合代码、集合名称和忽略大写字母的百分比匹配。

我正在尝试以“cat -v 被认为有害”的方式编写这些工具(http://harmful.cat-v.org/cat-v/),没有格式化参数,试图使工具保持“一项工作”。

但这给我带来了一个问题......输出实际上应该如何发送到命令行? Unix 工具本身非常不一致,在当今时代,我们实际的工具包程序会以完全不一致的方式输出非常奇怪的事情。大多数都有自己的格式选项,这些选项非常不一致。

我尝试使用制表符分隔的输出,但“column”命令希望将所有空白视为相等,并将“制表符”放入列中,因为分隔符需要一些 shell 黑魔法。我也许可以放弃并使用逗号,但万智牌中的鹏洛客卡牌名称中含有逗号,这会给我带来类似的问题。管道分隔格式几乎可以保证不会与任何内容发生冲突,但是如果您不使用列来输出内容,那么这会导致人类不友好的格式。

我真的宁愿避免进行某种管道检测来进行人或机器友好的输出。

最坏的情况是,我认为我可以将所有内容输出为 JSON 或其他一些文本友好的格式,并且只提供一个格式化工具,该工具可以获取其他工具的输出并按照您的意愿格式化它们,但这只会增加复杂性。

也许答案只是“在你的工具中保持一致”。我可能只能走那条路。但我希望实际上有一个命令行工具“推荐输出格式”的风格指南。我尝试四处查看,Cat-v 认为有害网站有很多关于工具不应该做什么的抱怨,但对于它们应该做什么却没有太多抱怨。

相关内容