我的文件中的列以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
方法吗?也许是另一个工具?
答案1
你可以只使用 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
答案2
sed 's/||/| |/g;s/||/| |/g' filename-here
上面的命令适用于管道,因此将其替换为制表符空间。
您只需要用空格替换空列,并将输出通过管道传输到您已经使用的命令。