我正在尝试获取一些单列数据并将其作为列显示在 tty 中,就像ls
这样做一样。基本上,您可以将其视为尝试获取的输出ls -1
并使其看起来像的正常输出ls
,其中列数和分配给每列的空间都经过了优化。
列命令不能轻易被强制占用一定的宽度,并且pr
实用程序不会动态改变列数。
随着所有文本解析命令可用,我只是不敢相信没有某种方法可以实现这一点。
这将是一个相当复杂的小 shell 脚本,因为为了计算最佳列宽,您需要知道列中将有多少个项目(以计算最长项目的长度),而这只有在您确定将有多少列时才知道,这取决于每列的宽度。由于循环推理,似乎迭代细化是唯一的方法。这并不难,但也不是一行代码。如果存在内置解决方案,那将是一个更好的解决方案。
答案1
你会想要pr
命令:
$ seq 25 | pr -t -5
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
答案2
你可能会满意
My Command | column -t
如果你想将多行合并为一行,你可能需要使用 sed 命令
ls -1 \
| sed -e 'N;N;N;s/\n/\t/g' \
| column -t
在这种情况下,您将用四行(三N;
是四减一)制作一行,然后将新行更改\n
为缓冲区()中\t
每行( )的制表符( )。\t
g
最后一行column -t
使其成为最佳列。
结尾\
只是转义换行符。您可能需要输入
ls -1 | sed -e 'N;N;N;s/\n/\t/g' | column -t
反而。
希望您玩得开心。