docs=(
" cmd1||Run cmd1."
" cmd3||Long text Long text Long text Long text Long text Long text."
$' cmd2|[N]|Do something with N.nA new line.nAnother line'
)
column -t
--separator "|"
--output-width 60
--table-noheadings
--table-wrap C3
--table-columns C1,C2,C3 < <(printf "%sn" "${docs[@]}")
# cmd1 Run cmd1.
# cmd3 Long text Long text Long text Long text L
# ong text Long text.
# cmd2 [N] Do something with N.
# A new line.
# Another line
# Expected:
# cmd1 Run cmd1.
# cmd3 Long text Long text Long text Long text L
# ong text Long text.
# cmd2 [N] Do something with N.
# A new line.
# Another line
为了清晰起见,我想在每个单元格中保留换行符,但似乎没有用于此目的的标志(对于上下文,第3列是从函数注释等中提取的,所以我不希望每一行都混在一起(。是否有一种稳健的方法将每个单元格的内容与预期输出对齐?作为一种变通方法,我曾想过以某种方式计算C1和C2的宽度,并用sed
为空格做准备,但感觉很麻烦,我不知道该怎么做。
EDIT:每次都会动态生成docs
数组和每个文档的内容。
util linux 2.36.2中的列
经过思考,最简单、最稳健的解决方案似乎只是用换行符拆分最后一列的内容,并用空单元格构建新行:
docs=(
" cmd1||Run cmd1."
" cmd3||Long text Long text Long text Long text Long text Long text."
$' cmd2|[N]|Do something with N.'
$' ||A very very very very very very very very long line.'
$' ||Another line'
)
column -t
--separator "|"
--output-width 60
--table-noheadings
--table-wrap C3
--table-columns C1,C2,C3 < <(printf "%sn" "${docs[@]}")
# cmd1 Run cmd1.
# cmd3 Long text Long text Long text Long text Long
# text Long text.
# cmd2 [N] Do something with N.
# A very very very very very very very very lon
# g line.
# Another line