我想格式化文本内容,我使用column
作为标准输出流,但是我失败了。例如,使用一个单一的线,一切工作正常:Linux:使用列格式化流(管道)输出? (未确定的文件大小)
$ echo "1 12 123 1234 1 12 123 1234 " | column -t
1 12 123 1234 1 12 123 1234
。但是,如果我尝试模拟“没完没了”流:
$ while true; do echo "1 12 123 1234 1 12 123 1234 "; sleep 1; done | column -t
^C
...根本就没有反应,直到用Ctrl-C退出。
(注意while
事情是只是为了模拟从设备读取层出不穷,如“cat /dev/ttyUSB0
”)
这使我相信,即使column
默认情况下应该接受标准输入,它需要一个“完整的”和完成的文件(即,具有确定的文件大小)才能工作;而在“无尽的”流的情况下,情况并非如此 - 所以它从不输出任何东西。
任何有关如何在此上下文中实现列格式的建议?编辑:不一定必须是column
程序;任何其他格式文本成列将罚款(但我恐怕,例如awk
也需要一个完整的文件)...
在此先感谢,
干杯!
最有可能列有阅读所有的输入,以决定如何广,使每一列。所以你不能将它用于“无尽的”流,否则它最终会消耗所有的内存。 – Keith 2011-06-11 15:58:28
感谢您确认@Keith - 我猜是这样,'column'不适用于此;但那里是否存在替代工具,这将工作“每行”而不是“每个文件”?我想,在这种情况下,列数和列宽必须事先指定,但这对我来说是可以的。干杯! – sdaau 2011-06-11 16:02:31
您可以将其管道化为sed,并用制表符替换空格,并让终端制表符将其格式化为列。 '... | sed -e's/[] \ +/\ t/g'' – Keith 2011-06-11 16:13:47