空のセルが見つからない場合にコンソールでTSV(csv)を表示する方法: `column -t -s $ '\ t'`


12

の列が含まれるファイルがありますtab

一部の行に空のセルがある場合(開始時、中間)にファイルがあります。

そのような場合、column -t -s $'\t'単に失敗します:

入力:

$ echo -e 'A\tB\tC\tD\n\tb1\t\td1\n\t\t\td2\na3\t\t\td3' > in.tsv
$ hexdump -C in.tsv 
00000000  41 09 42 09 43 09 44 0a  09 62 31 09 09 64 31 0a  |A.B.C.D..b1..d1.|
00000010  09 09 09 64 32 0a 61 33  09 09 09 64 33 0a        |...d2.a3...d3.|
0000001e

列出力:

$ cat in.tsv | column -t -s $'\t'
A   B   C  D
b1  d1
d2
a3  d3

の代わりに:

A       B       C       D
        b1              d1
                        d2
a3                      d3

TSVコマンドラインのフォーマット方法をお勧めしますか?(Unixのように、プログラムの出力をフォーマッタにパイプで渡したい、などcolumn

「修正」columnアプローチの方法はありますか?たぶん別のツール?

回答:


12

Debianのみを使用できますcolumn-n希望どおりに機能するオプションを提供します。

または、次を使用して、空の列にスペースを入れることができますsed

sed ':x s/\(^\|\t\)\t/\1 \t/; t x' < in.tsv | column -t -s $'\t'

例:

$ sed ':x s/\(^\|\t\)\t/\1 \t/; t x' < in.tsv | column -t -s $'\t'
A   B   C  D
    b1     d1
           d2
a3         d3

'^'がアトムを指定していないため、代替の '^ \ | \ t'でsedがどのように動作するのか心配です。(だから、それは代用しようとしている\1空の文字列と?
グジェゴシWierzowiecki

はい、\(^\)単独で行の先頭に固定された空の文字列に一致します。\1その空の文字列の「コピーを作成」します。
アンガス

0
sed 's/||/| |/g;s/||/| |/g' filename-here

上記のコマンドはパイプ用であるため、タブスペースに置き換えてください。

空の列を空白スペースに置き換え、既に使用しているコマンドに出力をパイプするだけです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.