Similar projects and alternatives to tv
Scout APM: A developer's best friend. Try free for 14-days. Scout APM uses tracing logic that ties bottlenecks to source code so you know the exact line of code causing performance issues and can get back to building a great product faster.
Run Linux Software Faster and Safer than Linux with Unikernels.
Reviews and mentions
Tidy Viewer is a cross-platform CLI csv pretty printer that uses column styling to maximize viewer enjoyment.
reddit.com/r/commandline | 2021-09-27
TV is a cross-platform CSV pretty printer made to maximize viewer enjoyment
reddit.com/r/patient_hackernews | 2021-09-27reddit.com/r/hackernews | 2021-09-27
1. Looks like 0.0.13 the current version is 0.0.13
2. I need to update the README the binaries are here https://github.com/alexhallam/tv/releases/tag/0.0.13
Ah, I didn't mean a newline at the end of the output. Just a space after your shell prompt ($), see e.g. https://github.com/alexhallam/tv/blob/main/img/column_v_tv2.....
I added VisiData in my README and represented it in a positive light in the description. Again, just wanted to apologize for my mistake.
And a list of options. Reading the first 80 lines of https://github.com/alexhallam/tv/blob/main/src/main.rs was in some sense more educational than the readme.
It, for example, allowed me to make an educated guess as to the answer to the question “how does this handle huge files?”. It by default only reads 25 lines.
(That makes the example from the header:
cat diamonds.csv | head -n 35 | tv
Demo looks great, alas the prebuilt binaries don't work
$ wget https://github.com/alexhallam/tv/releases/download/0.0.10/tidy-viewer
First of all - kudos on tackling this task - it is indeed very annoying to get CSVs to render nicely on a terminal.
> How does tidy-viewer compare with csvlook?
The most important issue to me is that csvlook is a much less pleasant viewing experience, but there is also this ...csvlook reads and parses all of the data. Try pushing diamonds.csv to csvlook. When I do it on my machine it takes 15.228 seconds while tv takes 0.0042 seconds. For this reason tv is much faster, but speed is not the goal of the package. tv's purpose is to maximize viewer enjoyment.
2. Looking at the demo video, there seems to be an odd fixation with "N/A". The CSV spec, AFAIK, doesn't recognize this phrase. I don't understand why someone would expect a quoted string field whose raw characters are "n/a" should be rendered as anything other than n/a (i.e. lowercase and without the quotes). I'm guessing maybe in your workflow you want to use that phrase a lot, but for a tool for the general public I'd not do this kind of interpretation; and I would leave an empty field as empty.
I could not say it better than this:
> The norm of treating missing data as NA exists in R (which the developer of this is clearly inspired by based on the GitHub readme.). Pandas in Python is stuck with NaN for numeric types (not quite correct) and "" or None for string types. Personally I like the choice to both explicitly render missing data in colour and to apply NA as a placeholder text to display that colour.
3. tidy-viewer seems to require "unstable library features", or at least ones which were unstable as of Rust 1.48.0 . It would be nice if you could be compatible with older rust distributions/versions.
That is a good point. I also release binaries which I think makes this requirement less needed. What are your thoughts.
4. Many systems, especially older ones, especially ones which you access remotely and don't have root privileges on, won't have a rust installation. It would be even more convenient if you could provide binaries with little or no extra dynamic library dependencies, which could be used on older / rustless systems. I realize this is a tall order, however.
With github actions I auto-build binaries for many OSes. See https://github.com/alexhallam/tv/releases/tag/0.0.13
5. What about scrolling? The worst part of viewing CSVs is having to handle wide ones which exceed the terminal width, and having decent horizontal as well as vertical scrolling ability. less doesn't cut it, because it doesn't keep the header row, plus it doesn't recognize field widths.
Scrolling is nice. To offer scrolling the only option I am aware of is turning this cli into a tui. I made the choice early on to stay chose the more minimal path and stick to a cli. The goal is to be a `column` replacement not a spreadsheet replacement.
6. tidy-viewer does not seem to support wrapping longer fields onto multiple terminal lines.
The goal is to glance at the data as a whole not a cell or fields. If there are cells with long text they get cut at 20 characters. I like this a lot. I would prefer to know that there is a lot of text that I can dig into latter, but when I am glancing at the csv I just want an overall picture. In my view tables of data are data visualizations meaning that I don't have to show everything to understand enough of it.
7. When the user doesn't specify the color scheme, are you choosing one based on the terminal colors, or are you using absolute color values? I suggest the former.
Great question. I want to eventually add the ability for users to make a config file will their own colors. At this time I just have absolute presets. If you are interested I would happily take a contribution that allows users the option to configure tv with some dotfile.
8. tidy-viewer loads and parses the entire CSV immediately; and, in fact, seems to keep two copies of it in memory at once. This means it cannot be used with large files without thrashing; and even if your CSV does fit in global memory, it will still be kind of unusable, trying to dump gigabytes onto the terminal.
That is almost true. tidy-viewer reads the entire csv, but only parses the head. If I knew of a way to get the number of rows and columns of a csv without reading the whole file then I would. I know there is a good deal more room for memory optimization. This is not my strength and I am still learning.
9. Bottom line: A nice initial effort, but the more serious challenges are yet to be tackled, plus needs to be more robustly cross-platform.
Thanks for the compliment. It is still a work in progress.
I actually read that article when I started making the package. You can see some of the input data here https://github.com/alexhallam/tv/blob/main/data/a.csv. I let the user chose how long the max column width should me then append "...". The default value is 20 characters.
If you come across an edge case that tv does not handle then let me know. I will add a tests csv file as part of the current portfolio of test csvs. https://github.com/alexhallam/tv/tree/main/data
I love xsv! I mention in the readme that command line data manipulation tools are great compliments to tv.
Not OP, but there's a screenshot under https://github.com/alexhallam/tv#1-na-comprehension.
Some (most?) tools that output data in columns and fit each one to the largest value in that column need to scan the whole file as a first pass just to start displaying data.
Not only is it the case with this tool, but from what I'm reading in main.rs it looks like it's also loading the whole file in memory. I was going to say that scanning the file was a deal-breaker, but if true this is much more resource-intensive.
This looks like a nice tool, but these design choices seem to limit its use to relatively small files. It could be updated to have a read-ahead buffer instead and adjust its output as new lines are discovered with values of different width, although doing this without a jarring resize could be challenging.
Could someone with better knowledge of Rust than mine confirm this?
I see the full dataset being loaded here and the column widths being computed here.
tv -- a pretty-printing CSV viewer
reddit.com/r/rust | 2021-09-27
alexhallam/tv is an open source project licensed under The Unlicense which is not an OSI approved license.