ChatGPT解决这个技术问题 Extra ChatGPT

从命令行查看表格文件,例如 CSV [关闭]

关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。 3年前关闭。我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。改进这个问题

有人知道 Linux/OS X 的命令行 CSV 查看器吗?我正在考虑类似 less 的东西,但它以更易读的方式分隔列。 (我可以使用 OpenOffice Calc 或 Excel 打开它,但是对于像我需要的那样查看数据来说,这太强大了。)水平和垂直滚动会很棒。

因为我无法给出答案:SC-IM 是一个 CLI 查看器和编辑器,用于也可以打开 CSV 的表。 github.com/andmarti1424/sc-im

L
Lekensteyn

你也可以使用这个:

column -s, -t < somefile.csv | less -#2 -N -S

column 是一个非常方便的标准 unix 程序——它找到每列的适当宽度,并将文本显示为格式良好的表格。

注意:每当您有空字段时,您需要在其中放置某种占位符,否则该列将与以下列合并。以下示例演示如何使用 sed 插入占位符:

$ cat data.csv
1,2,3,4,5
1,,,,5
$ sed 's/,,/, ,/g;s/,,/, ,/g' data.csv | column -s, -t
1  2  3  4  5
1           5
$ cat data.csv
1,2,3,4,5
1,,,,5
$ column -s, -t < data.csv
1  2  3  4  5
1  5
$ sed 's/,,/, ,/g;s/,,/, ,/g' data.csv | column -s, -t
1  2  3  4  5
1           5

请注意,将 ,, 替换为 , , 进行了两次。如果您只执行一次,1,,,4 将变为 1, ,,4,因为第二个逗号已经匹配。


我真的很喜欢这个选项——很高兴了解 column。我最终把它做成了一个简短的 shell 脚本(大部分是样板“我如何使用它?”和错误检查代码)。 github.com/benjaminoakes/utilities/blob/master/view-csv
'Debian GNU/Linux' 版本的 column 具有 '-n' 选项:“默认情况下,使用 -t 选项时,column 命令会将多个相邻的分隔符合并为一个分隔符;此选项禁用该行为。此选项是一个 Debian GNU/Linux 扩展。”
如果您有带有逗号的列值(引用),它似乎会中断。知道如何解决这个问题吗?
来自 man column-n By default, the column command will merge multiple adjacent delimiters into a single delimiter when using the -t option; this option disables that behavior. This option is a Debian GNU/Linux extension.
不幸的是,如果一个值包含逗号,即使它被引用,它也会被拆分。
B
Boris Verkhovskiy

您可以通过以下方式安装 csvtool(在 Ubuntu 上)

sudo apt-get install csvtool

然后运行:

csvtool readable filename | view -

这将使它在只读 vim 实例中变得漂亮漂亮,即使您有一些具有非常长的值的单元格。


对于那些不在基于 Debian 的发行版的人来说,这个工具似乎来自这里:docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz 不幸的是,“主页”链接已经失效,而且我没有看到一个简单的方法来一次下载整个档案。
该工具无法处理 100Mb+ 的文件
此工具可从 Centos7 中的 base 中的 ocaml-csv 包获得
S
Sandeep

看看csvkit。它提供了一组遵循 UNIX 理念的工具(意味着它们体积小、简单、用途单一并且可以组合)。

以下示例从免费的 Maxmind World Cities database 中提取了德国人口最多的 10 个城市,并以控制台可读的格式显示结果:

$ csvgrep -e iso-8859-1 -c 1 -m "de" worldcitiespop | csvgrep -c 5 -r "\d+" 
  | csvsort -r -c 5 -l | csvcut -c 1,2,4,6 | head -n 11 | csvlook
-----------------------------------------------------
|  line_number | Country | AccentCity | Population  |
-----------------------------------------------------
|  1           | de      | Berlin     | 3398362     |
|  2           | de      | Hamburg    | 1733846     |
|  3           | de      | Munich     | 1246133     |
|  4           | de      | Cologne    | 968823      |
|  5           | de      | Frankfurt  | 648034      |
|  6           | de      | Dortmund   | 594255      |
|  7           | de      | Stuttgart  | 591688      |
|  8           | de      | Düsseldorf | 577139      |
|  9           | de      | Essen      | 576914      |
|  10          | de      | Bremen     | 546429      |
-----------------------------------------------------

Csvkit 是独立于平台的,因为它是用 Python 编写的。


在我的 MAC 上运行良好。对于读取大文件非常有用。
我喜欢 Csvkit。 csvlook <文件名.csv> |少-S
要获取 csvkit,您只需 pip 安装它:pip install csvkit。享受!
Maxmind 数据库的链接已失效
也可以使用 brew 来安装它,只需运行 brew install csvkit
S
Scott Hansen

Tabview:轻量级 python curses 命令行 CSV 文件查看器(以及其他表格 Python 数据,如列表列表)位于 Github

特征:

Python 2.7+、3.x

Unicode 支持

用于轻松可视化表格数据的类似电子表格的视图

类 Vim 导航(h,j,k,l, g(top), G(bottom), 12G goto line 12, m - mark, ' - goto mark 等)

切换持久标题行

动态调整列宽和间距

按任何列升序或降序排序。数值的“自然”顺序排序。

全文搜索,n和p在搜索结果之间循环

'Enter' 查看完整的单元格内容

将单元格内容拉到剪贴板

F1 或 ?用于键绑定

也可以使用 python 命令行来可视化任何表格数据(例如列表列表)


很棒的工具。打开一个大文件,导致 csvtool 和 openoffice 崩溃。也非常快。
在 Windows 上成功执行“pip install tabview”后,如何启动程序?我可以在 linux 上成功使用“tabview file.csv”,但 windows 似乎无法正常工作。谢谢!
我不相信 curses 模块在 Windows 上可用。对不起!可能有第三方模块可用,但我还没有为 Windows 做过任何开发。
@CiroSantilli乌坎事件2016六四事件法轮功,可惜还没有。我希望很快能在 tabview 上花点时间……这里已经休眠了一段时间。 :(
TabView 现在推荐 VisiData,它是一个很棒的 CSV 文件交互式查看器。 jsvine.github.io/intro-to-visidata
M
Matt Ball

如果您是 vimer,请使用非常漂亮的 CSV plugin

https://www.256bit.org/%7Echrisbra/csv.gif


太慢了,但这个想法很酷。
u
user3751385

可以全局安装 nodejs 包 tecfu/tty-table 以准确执行此操作:

apt-get install nodejs
npm i -g tty-table
cat data.csv | tty-table

https://i.stack.imgur.com/3KcvX.png

它还可以处理流。

有关详细信息,请参阅 docs for terminal usage here


如果您投反对票,请留下理由。这个包很好用。
nodejs 是一个网络服务器平台。你不应该推荐别人用电锯切面包。
node 是一个具有 CLI 绑定的通用脚本系统,这与使用 perl 单行代码或 CPAN 中的其他东西有什么不同?
我真的很喜欢这个选项,但是当我将它传递到 less 时,它看起来不正确。你知道是否需要一些额外的东西才能让它用更少的东西工作吗?
如果文件包含许多列(特别是超过终端屏幕的水平宽度可以处理)并且此后没有正确对齐它们,则此包会中断。
s
smartmic

xsv 不仅仅是查看器。我推荐它用于命令行上的大多数 CSV 任务,尤其是在处理大型数据集时。


基于生锈。与 ripgrep 相同的作者。很酷。
p
pisswillis

Ofri 的回答为您提供了您所要求的一切。但是..如果您不想记住命令,可以将其添加到 ~/.bashrc (或等效项):

csview()
{
local file="$1"
sed "s/,/\t/g" "$file" | less -S
}

这与 Ofri 的答案完全相同,只是我已将其包装在 shell 函数中并使用 less -S 选项来停止换行(使 less 的行为更像办公室/oocalc)。

打开一个新的 shell(或在当前 shell 中键入 source ~/.bashrc)并使用以下命令运行命令:

csview <filename>


这不处理引号中的逗号。
T
Tom Weiss

我使用了 pisswillis 的答案很长一段时间。

csview()
{
    local file="$1"
    sed "s/,/\t/g" "$file" | less -S
}

但随后结合了我在 http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-line 找到的一些对我来说效果更好的代码:

csview()
{
    local file="$1"
    cat "$file" | sed -e 's/,,/, ,/g' | column -s, -t | less -#5 -N -S
}

它对我来说效果更好的原因是它可以更好地处理宽列。


N
Nikos Alexandris

又一个多功能 CSV(不仅是)操作工具:Miller。从它自己的描述来看,它类似于 awk、sed、cut、join 和 sort 用于名称索引数据,例如 CSV、TSV 和表格 JSON。 (链接到 github 存储库:https://github.com/johnkerl/miller


我通过搜索引擎来到这里,所以如果有人找到这个答案,这里有一个方便的 miller 命令行,可以漂亮地打印 CSV 标题、绘制表格边框并右对齐列值:mlr --icsv --opprint --barred --right cat YOUR_FILE.csv(将 --icsv 替换为 --itsv如果您的文件是 TSV)。
O
Ofri Raviv

这是一个(可能也是)简单的选项:

sed "s/,/\t/g" filename.csv | less

这也是我的第一个倾向。但是你必须插入足够的标签来匹配你的列的最长值......开始变得有点复杂,我想“其他人一定已经这样做了。”
您还忽略了逗号可能被引用而不是分隔符的事实。 (除其他外)
s
stefan.schroedl

Tabulator 包中的 tblless 包装了 unix column 命令,并且还对齐数字列。


这还不错,它工作可靠,但格式化肯定会更好,而且它不能很好地推断最大列宽——它有点盲目地强制执行任意限制。米勒 (mlr) 肯定做得更好。
N
Nico Schlömer

我为这些(和其他)目的创建了 tablign。安装

pip install tablign

$ cat test.csv
Header1,Header2,Header3
Pizza,Artichoke dip,Bob's Special of the Day
BLT,Ham on rye with the works,
$ tablign test.csv
Header1 , Header2                   , Header3
Pizza   , Artichoke dip             , Bob's Special of the Day
BLT     , Ham on rye with the works ,

如果数据由逗号以外的其他内容分隔,也可以使用。最重要的是,它保留了分隔符,因此您还可以使用它来设置 ASCII 表的样式,而不会牺牲 [Markdown,CSV,LaTeX] 语法。


Collecting tablify Could not find a version that satisfies the requirement tablify (from versions: ) No matching distribution found for tablify
@masterxilo 我将其重命名为 tablign。已在说明中修复。
完美,刚刚好。
看起来不错,但在 70MB 文件上使用了大量内存(几 GB)。
J
Jean Vincent

我写了这个 csv_view.sh 从命令行格式化 CSV,这会读取整个文件以找出每列的最佳宽度(需要 perl,假设字段中没有逗号,也使用较少):


#!/bin/bash

perl -we '
  sub max( @ ) {
    my $max = shift;

    map { $max = $_ if $_ > $max } @_;
    return $max;
  }

  sub transpose( @ ) {
    my @matrix = @_;
    my $width  = scalar @{ $matrix[ 0 ] };
    my $height = scalar @matrix;

    return map { my $x = $_; [ map { $matrix[ $_ ][ $x ] } 0 .. $height - 1 ] } 0 .. $width - 1;
  }

  # Read all lines, as arrays of fields
  my @lines = map { s/\r?\n$//; [ split /,/ ] } ;

  my $widths =
    # Build a pack expression based on column lengths
    join "",

    # For each column get the longest length plus 1
    map { 'A' . ( 1 + max map { length } @$_ ) }

    # Get arrays of columns
    transpose

    @lines
  ;

  # Format all lines with pack
  map { print pack( $widths, @$_ ) . "\n" } @lines;
' $1 | less -NS


R
Raptor

使用 TxtSushi 您可以:

csvtopretty filename.csv | less -S

否决不是单行安装程序。我没有时间编译这个:(。如果你能提供一个很棒的包。
@masterxilo 这不是拒绝投票的正当理由。今天的许多软件包都需要几个步骤来安装。另外,安装可能比写评论更快。
p
pratyahara

Tabview 真的很不错。使用 200+MB 的文件显示得很好,这些文件在 LibreOffice 和 gvim 中的 csv 插件中存在问题。

Anaconda 版本可在此处获得:https://anaconda.org/bioconda/tabview


J
James Durbin

为此,我在 Groovy 中编写了一个脚本 viewtab 。你像这样调用它:

viewtab filename.csv

它基本上是一个超轻量级的电子表格,可以从命令行调用,处理 CSV 和制表符分隔的文件,可以读取 Excel 和 Numbers 阻塞的非常大的文件,而且速度非常快。它不是纯文本意义上的命令行,但它独立于平台,可能适合许多寻求解决方案的人的账单,以解决在命令行环境中工作时快速检查许多或大型 CSV 文件的问题.

此处描述了该脚本及其安装方法:

http://bayesianconspiracy.blogspot.com/2012/06/quick-csvtab-file-viewer.html


R
Rufus Pollock

python 中有这个简短的命令行脚本:https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py

只需下载并放置在您的路径中。用法就像

csv2ascii.py [options] csv-file-path

csv-file-path 处的 csv 文件转换为 ascii 格式,在标准输出上返回结果。如果 csv-file-path = '-' 然后从标准输入读取。

选项:

-h, --help            show this help message and exit
  -w WIDTH, --width=WIDTH
                        Width of ascii output
  -c COLUMNS, --columns=COLUMNS
                        Only display this number of columns