以表格视图/格式监控/跟踪 CSV 文件更改/更新

以表格视图/格式监控/跟踪 CSV 文件更改/更新

我想监视/跟踪 CSV 文件的更改(机器人的一些日志输出)。这是一个巨大的文件,带有<TAB>分隔符和带有标题信息的第一行。

到目前为止,我正在使用 的输出tail - f <file.csv>,但它没有按列格式化,看起来像:

yAccelRaw       zAccelRaw       xGyroRaw    ... ... ...
3       256     1   ... ... ...
4       255     3   ... ... ... 
4       255     -6  ... ... ...
3       253     -1  ... ... ...
4       254     2   ... ... ...
5       255     0   ... ... ...
4       255     3   ... ... ...
5       254     3   ... ... ...
5       253     -1  ... ... ...
4       255     3   ... ... ...

对于包含 30 列或更多列的 CSV,了解哪个值属于哪个列并不容易。我在徘徊是否有一个一般的打印表格格式的输出的解决方案?

到目前为止,我习惯tail -f <file.csv> | cut -f5,6剪切特定的列并观察它们的输出,但我更喜欢完整的概述。另外,我尝试将结果传递给column未更新的结果。

答案1

例如,您可以使用 awk 捕获第一行的标题,并每 10 行重复一次,并减少列大小以表示最多 5 个字符,如下所示:

tail -n +1 -f file.csv |
awk  'NR==1 { n=split($0,hdr) }
NR%10==1    { for(i=1;i<=n;i++)printf "%5.5s ",hdr[i];printf "\n" }
            { for(i=1;i<=n;i++)printf "%5.5s ",$i;printf "\n" }
'

这会给类似的东西

yAcce zAcce xGyro ...
    3   256     1 ...
    4   255     3 ... 
    4   255    -6 ...
    3   253    -1 ...
    4   254     2 ...
    5   255     0 ...
    4   255     3 ...
    5   254     3 ...
    5   253    -1 ...
    4   255     3 ...
yAcce zAcce xGyro ...
    3   256     1 ...
...

如果宽度仍然太宽而无法适合您的终端,您可以将结果通过管道传输到其中,less -S +F使其行为类似于tail -f,但如果您使用 Control-C 暂停尾部,则允许您使用箭头左右滚动。继续拖尾式F

答案2

Column 完全满足您的要求。您可以使用参数将 tab 标识为分隔符。为什么这里没有管道到 column 的选项?cat <file.csv> | column -s "\t"

相关内容