我想将长控制台行打印为彼此下方的页面。
例如
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
省略则将所有字符带到行尾。
因此,它获取您的数据,将其复制到三个流中,然后垂直分割每个流。