Text-Processing

如何在控制台中顯示 TSV (csv),當空單元格失去時:column -t -s $'t'

  • August 20, 2014

我的文件中以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方法?也許是另一個工具?

您可以只使用 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 's/||/| |/g;s/||/| |/g' filename-here

上面的命令是用於管道的,所以用 tabspace 替換它。

您只需要用空格替換空列並將輸出通過管道傳輸到您已經在使用的命令。

引用自:https://unix.stackexchange.com/questions/29023