Unixパイプの創設者であり、Unixの伝統の創設者の一人であるDoug McIlroyは、当時、次のように述べています[McIlroy78]。
(ii) 各プログラムの出力は、未知の他のプログラムの入力になると予想される。不要な情報で出力を複雑にしないでください。厳密な列形式またはバイナリ入力形式を避けてください。インタラクティブな入力にこだわらないでください。
厳密に言えば、柱状のデータは私によく聞こえるので、彼が何を意味するのか理解できないかもしれません。
これは何を意味し、なぜ悪いのですか?
答え1
私の考えでは、その人が言うと思います。調整通常の列データではなく列。これが私の理解です厳しくそれでも。たとえば、
悪い:
1 200 3
100 3 400
いいね:
1 200 3
100 3 400
つまり、人よりもコンピュータが読みやすいファイルを作成します。アイテムを並べ替えるためにスペースを追加すると、わかりやすく、わかりやすくなりますが、解析が必要なプログラムでは混乱を招く可能性があります。
cut
たとえば、上記の各例の2番目のフィールドを取得するために、最初のフィールドは失敗します。
$ cut -d' ' -f 2 bad
$ cut -d' ' -f 2 good
200
3
bad
ファイルの 2 番目のフィールドは、余分なスペースがあるためスペースです。ただし、ドキュメントで期待どおりに機能しますgood
。
答え2
厳密な円柱形
fixed with
そしてordered columns
VSdynamic width
とheaders
はい
固定幅
名前(7バイト)[スペース]年齢(2バイト)[スペース]キー(5バイト)
alice 10 150cm
bob 20 160cm
carol 30 170cm
Alexander
今年齢40
とキーを追加する必要がある場合180cm
alice 10 150cm
bob 20 160cm
carol 30 170cm
Alexa~1 40 180cm
厳しい柱構造に合わず、より柔軟な柱構造を使用するとスペースが不足します。
スペースで区切られた値
スペースで区切られた値を使用すると、これらの問題を回避できます。
alice 10 150cm
bob 20 160cm
carol 30 170cm
Alexander 40 180cm
スペースで区切られた値
または、列を区切る1つ以上のスペースで書式設定します。
alice 10 150cm
bob 20 160cm
carol 30 170cm
Alexander 40 180cm
スペースの数は重要ではないため、必要に応じて人間が読みやすいようにフォーマットしたり、ファイルの密度を指定したりできます。 Unix哲学の観点からも、この形式は最初の行が空白の名前である場合、列の順序や存在を強制しません。列の後にデータスペースで区切られたファイルが続きます。
Name Age Height
alice 10 150cm
bob 20 160cm
carol 30 170cm
Alexander 40 180cm
そして
Age Height Name
10 150cm alice
20 160cm bob
30 170cm carol
40 180cm Alexander
ヘッダーに気にしない追加の列がある場合は、最初のものと同じように機能します。これにより、より柔軟性が得られます。
Age Height t_shirt_size Name
10 150cm S alice
20 160cm M bob
30 170cm L carol
40 180cm XL Alexander
Name
私たちはまだ、、、およびをAge
読むことができ、Height
私たちが気にしないヘッダーを持つ列を無視できます。それでもオブジェクトにロードされています
[{"Name":"alice", "Age":10, "Height":"150cm"},
{"Name":"bob", "Age":20, "Height":"160cm"},
{"Name":"carol", "Age":30, "Height":"170cm"},
{"Name":"Alexander","Age":40, "Height":"180cm"}]
これらのルールにより、CSVなどのファイル形式が生成されました。https://www.rfc-editor.org/rfc/rfc4180
Age,Height,t shirt size,Name
10,150 cm,S,alice
20,160 cm,M,bob
30,170 cm,L,carol
40,180 cm,XL,Alexander
これを避けることで、stringently columnar data
未知のプログラムが修正されていないプログラムに入力される可能性が高くなります。
私のプログラムがデータをCSV形式で出力すると、私が存在するかどうかわからない多数のプログラムがそれを読み込んでプロットすることができます。