Bash:在同一列内换行

pho*_*bic 5 bash formatting

我想创建一个包含两列的表。第一列包含键名称,第二列包含值。该值可以是通常在终端中导致多行的文本。

使用printfcolumn可以轻松获得以下输出:

<----- Terminal Length ------>
key1     This is the value for
key1 with a very long text. 
...
Run Code Online (Sandbox Code Playgroud)

但我希望将值显示在同一列中,如下所示:

<----- Terminal Length ------>
key1     This is the value for
         key1 with a very long
         text.
...
Run Code Online (Sandbox Code Playgroud)

如何在同一列内换行?

Oli*_*ieu 5

实际上,util-linux 'column' 命令可以做到这一点。它用途广泛。

#!/bin/bash

cat <<- EOF | column --separator '|' \
                     --table \
                     --output-width 30 \
                     --table-noheadings \
                     --table-columns C1,C2 \
                     --table-wrap C2
key1|Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
key2|blahhhhhhhhhhhhhhhhhhhhhhhhhhhhzzz
EOF
Run Code Online (Sandbox Code Playgroud)

这给出:

key1  Lorem ipsum dolor sit am
      et, consectetur adipisci
      ng elit, sed do eiusmod
      tempor incididunt ut lab
      ore et dolore magna aliq
      ua.
key2  blahhhhhhhhhhhhhhhhhhhhh
      hhhhhhhzzz
Run Code Online (Sandbox Code Playgroud)

--output-width:给出所需的大小(可以使用“tput cols”,如上所述)

--table-columns C1,C2:为要与其他选项一起使用的列命名

--table-wrap C2:换行第 2 列

专栏版本:

# column -V
column from util-linux 2.33.1
Run Code Online (Sandbox Code Playgroud)

  • 这是什么版本的“专栏”?我安装的 Ubuntu 附带了 BSD“列”,它不支持这些选项。 (2认同)