我基本上想这样做:
tail -f trades.csv | csvtool readable -
我想使用 csvtool 以可读格式读取 CSV 文件,并且想继续观看它。
我认为该命令不起作用,因为tail -f
从不发出流结束信号,因此 csvtool 无限期地等待。当然,这个常见问题有解决方法吗?
谢谢
不存在 \xe2\x80\x9c 发出 EOF\xe2\x80\x9d 这样的东西。EOF 不是带外信号。EOF 是指尝试读取时报告没有剩余数据可供读取。
\n如果将输出通过管道传输tail -f
到一个在开始发出输出之前读取整个输入的程序,则该程序在读取完整输入之前不会发出任何输出。由于tail -f
永远不会关闭其输出(因为它永远不会停止发出输出),因此只有在终止尾部进程后才会发生这种情况。
csvtool readable
读取所有输入行,然后确定每个单元格的宽度,计算每列中单元格的最大宽度,最后发出宽度一致的所有行和列。在所有输入都可用之前不可能执行此计算,因为最后一行可能是具有最宽单元格的行。因此,在逻辑上不可能csvtool readable
以在读取所有输入之前开始发出输出 \xc2\xb9 的方式进行设计。
也许您不关心所有行具有相同的列宽。也许您只想要大部分宽度,如果出现更宽的行,宽度就会放大。这是合理的。但这不是 csvtool 提供的功能。
\n在许多情况下,\xe2\x80\x9c在逐渐发出foo | bar
输出时不会立即foo
发出输出\xe2\x80\x9d 是由于foo
. 请参阅关闭管道中的缓冲。但这不是这里发生的事情。对于不需要整个输入的 csvtool 子命令,输入来自缓冲其输出的程序,这可能是不同情况下的问题。
如果您想要的只是将 CSV 中的逗号转换为某种列对齐方式,并且您愿意手动指定列宽,这里是两行:
\ntail -f \xe2\x80\xa6 | python3 -u -c \'import csv, sys \nfor row in csv.reader(sys.stdin): print("\\t".join(row))\' | expand -t 11,13,17\n
Run Code Online (Sandbox Code Playgroud)\nexpand
如果您对大多数终端和编辑器使用的默认每 8 列制表符感到满意,则不需要此步骤。
\xc2\xb9对于挑剔者:超出第一行的第一个单元格,这没有帮助。
\n 归档时间: |
|
查看次数: |
254 次 |
最近记录: |