为什么要避免“严格的柱状”输入格式?

The*_*Cat 4 text-processing history unix-philosophy columns

Doug McIlroy,Unix 管道的发明者和 Unix 传统的创始人之一,当时有这样的话 [McIlroy78]:

(ii) 期望每个程序的输出成为另一个未知程序的输入。不要用无关信息混淆输出。避免严格的列式或二进制输入格式。不要坚持交互式输入。

严格的柱状数据对我来说听起来不错,所以我可能不明白他的意思。

这是什么意思,为什么不好?

ter*_*don 5

我假设他的意思是对齐的列,而不是一般的列数据。无论如何,这就是我如何严格理解的。例如:

坏的:

1    200 3
100  3   400
Run Code Online (Sandbox Code Playgroud)

好的:

1 200 3
100 3 400
Run Code Online (Sandbox Code Playgroud)

换句话说,制作易于计算机阅读的文件,而不是人类阅读的文件。添加空格来对齐事物会使它们变得漂亮且易于您和我理解,但可能会混淆需要解析它们的程序。

例如,如果我要使用cut获取上述每个示例的第二个字段,它会在第一个失败:

$ cut -d' ' -f 2 bad


$ cut -d' ' -f 2 good 
200
3
Run Code Online (Sandbox Code Playgroud)

由于多余的空格,bad文件的第二个字段是一个空格。但是,它在good文件中按预期工作。

  • 不,它更像是一堵数字墙,其中第 1-4 列表示 X,第 5 列表示 Y,第 6-12 列表示 Z,等等。没有分隔符。处理这些很好,但数据输入是后面的痛苦。请记住,当时的数据输入不是交互式的。相信我,当你第一次遇到这种情况时,你会尖叫着奔跑。:) (4认同)
  • 他的意思是固定宽度的记录。这些在 Fortran IV 和穿孔卡片时代被广泛使用。他们的邪恶方式在 AIX 中仍然存在。;) (3认同)