如何将长控制台行显示为分页视图?

如何将长控制台行显示为分页视图?

我想将长控制台行打印为彼此下方的页面。

例如

AAAAAAABBBBBBBXX
CCCCC
DDDDDDDEE
FFFFFFFGGGGG
IIII

应显示为

AAAAAAA
CCCCC
DDDDDDD
---
BBBBBBB

EE
---
XX


===
FFFFFFF
IIII

---
GGGGG


===

而不是换行。基本上,对于固定数量的行(“块”),如果行宽度超出特定列,则应创建一个新的“页面”并显示在控制台上。它应该在行块上完成,以避免许多行的“页面”出现在最底部。如果线路很长(本例中为“XX”),则可能还需要多个“扩展页面”。请注意,最后,可能会在输入中添加空行以获得完整的数据块。 “---”是页面分隔符,“= =”是块分隔符。

基本思想是显示类似表格数据对齐的内容。有没有简单的方法可以做到这一点?

答案1

这不完全是你所要求的,但这就是我所做的:

使用选项将输出less通过管道传输-S(截断长行):

my_command_that_outputs_tables | less -S

然后,在less查看器内,左/右光标键将左右“滚动”数据,一次或多或少地“滚动”一页。点击q退出,或?寻求帮助。


并且,以下是如何做你想做的事:

my_command_that_outputs_tables | expand | tee >(cut -c1-79) >(sleep 1; cut -c80-159) | {sleep 2; cut -c160-}

此示例适用于最多三个 80 列屏幕宽、带有 8 个空格制表位的数据。

  • expand将制表符转换为空格。如果没有这些带有选项卡的数据,则该数据将不适合终端。
  • tee在本例中,将数据复制到三个相同的流中;两个作为“文件”,一个作为标准输出。您可以根据需要添加任意数量的“文件”输出。
  • >(...)bash 语法将输出文件视为管道。
  • sleep 1以及sleep 2使页面按正确顺序显示的延迟。这有点像 hack;可能有更好的方法。
  • cut -cM-N从输入中取出一个垂直切片。M是第一列,从 1 开始计数,也是N最后一列。如果N省略则将所有字符带到行尾。

因此,它获取您的数据,将其复制到三个流中,然后垂直分割每个流。

相关内容