当空单元格被漏掉时,如何在控制台中显示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方式,我想将程序的输出通过管道传递给formatter,例如column

有什么“固定” column方法吗?也许是另一种工具?

Answers:


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

恐怕sed会与替代的'^ \ | \ t'一起表现...由于'^'未指定原子。(因此,它将替换\1为空字符串吗?
Grzegorz Wierzowiecki 2012年

是的,\(^\)单独匹配一个固定在行首的空字符串。\1“产生该空字符串的副本”。
安格斯2012年

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

上面的命令用于管道,因此将其替换为制表符空间。

您只需要用空格替换空列,然后将输出通过管道传递到您已经在使用的命令。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.