Unixパイプからタブ区切りのデータを取得しました。このデータを人が読める簡単なテーブルにフォーマットしたいと思います。
これらのタブを空白に拡張し、フィールドデータの幅に応じてタブストップを自動的に設定するにはどうすればよいですか?
たとえば、私の仮想スクリプトは次のように生成できます(実際のタブ文字を表すgenerate_tsv
ために使用します)。\t
alpha\t1\t0.21085026\tok
beta\t4096\t0.0\tok
gamma\t\t-1.0\tinvalid
を使用すると、| expand -t 12
次のようになります。
alpha 1 0.21085026 ok
beta 4096 0.0 ok
gamma -1.0 invalid
しかし、私は次のように少しコンパクトにしたいと思います(したがって、列を区切る2つのスペースがあります)。
alpha 1 0.21085026 ok
beta 4096 0.0 ok
gamma -1.0 invalid
@jw013が提案したように近いですが、| column -t -s $'\t'
空のセルを縮小するので正確ではありません。
alpha 1 0.21085026 ok
beta 4096 0.0 ok
gamma -1.0 invalid
ベストアンサー1
column(1)
古いBSDツールがある場合は、それを使用してきれいなcolumn -t
テーブルを印刷してみてください。
空のセルを表示するには、各空のセルにスペースを挿入する方法を試すことができます(2つの連続したタブで識別可能)。アイデアはcolumn(1)
、空白文字には独自の列を指定する必要がありますが、幅は単一文字であるため、テーブルサイズに影響を与えたり、出力で人に表示してはいけません。
generate_tsv |
awk '/\t\t/ { for (i = 0; i < 2; i++) gsub(/\t\t/, "\t \t") } 1' |
column -t -s $'\t'
上記のように、パイプに挿入された追加のコンテンツは、awk
すべての空のセルにスペースを挿入します。 2つの連続した空のセル()を処理するには、2回のパスが必要です\t\t\t
。