打印包含连续分隔符的空列的表格

打印包含连续分隔符的空列的表格

我通常用来column将输入转换为表格,例如:

$ echo 'a\tb\tc\nd\te\tf' | column -t -s $'\t'
a  b  c
d  e  f

但是它会折叠空列,例如:

$ echo 'a\tb\tc\nd\t\tf' | column -t -s $'\t'
a  b  c
d  f

当存在连续的分隔符时,而不是打印空列。这就是我想要的,使用column或其他方式:

a  b  c
d     f

答案1

如果您使用GNU column

-n
默认情况下,使用 -t 选项时,column 命令会将多个相邻分隔符合并为单个分隔符;该选项禁用该行为。该选项是 Debian GNU/Linux 扩展。

printf 'a\tb\tc\nd\t\tf\n'  | column -t -n -s $'\t'

输出:

a  b  c
d     f

如果不可用,您可以使用 sed在选项卡之间GNU column添加空格(或其他内容,例如 a ):-

printf 'a\tb\tc\nd\t\tf\n'  | sed -e ':loop; s/\t\t/\t-\t/; t loop' | column -t -s $'\t'

答案2

我在我的列命令版本中找不到 -n 选项,因此使用 sed 修复了它:

echo -e 'a\tb\tc\nd\t\tf' | sed 's/\t\t/\t \t/'| column -t -s $'\t'

答案3

对于没有 GNU 列的用户(例如 MacOS):请注意第一列和最后一列。如果第一列不是最长的,就会有一个转变。脚本中的循环似乎不需要。我建议使用以下管道:| sed $'s/^\t/-\t/;s/\t\t/\t-\t/g;s/\t$/\t-/' | column -t

paste \
<(printf "a\nb\nc") \
<(printf "1\n2\n3\n4444\n5\n6") \
<(printf "d\ne\nf\ng\nh\ni\nj\nijkl\nk\nl") \
<(printf "X") \
\
| sed $'s/^\t/-\t/;s/\t\t/\t-\t/g;s/\t$/\t-/' | column -t
a  1     d     X
b  2     e     -
c  3     f     -
-  4444  g     -
-  5     h     -
-  6     i     -
-  -     j     -
-  -     ijkl  -
-  -     k     -
-  -     l     -

相关内容