命令行CSV查看器?[关闭]


308

有人知道Linux / OS X的命令行CSV查看器吗?我在想类似的东西,less但以更易读的方式将列隔开。(我可以用OpenOffice Calc或Excel打开它,但这样做太强大了,以至于只按需要查看数据即可。)进行水平和垂直滚动会很棒。


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

Answers:


441

您还可以使用以下命令:

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

注意,,,for 的替换, ,完成了两次。如果只执行一次,1,,,41, ,,4由于第二个逗号已匹配,因此将变为。


2
我真的很喜欢这个选项-很高兴知道column。我最终将其制作成简短的Shell脚本(其中大部分是样板“如何使用它?”和错误检查代码)。 github.com/benjaminoakes/utilities/blob/master/view-csv
本杰明·奥克斯

24
“ Debian GNU / Linux”版本的列具有“ -n”选项:“默认情况下,当使用-t选项时,column命令会将多个相邻的定界符合并为一个定界符;此选项禁用该行为。 Debian GNU / Linux扩展。”
klokop

5
如果您的列值(带引号)中带有逗号,则似乎会中断。任何想法如何解决这个问题?
TM。

3
来自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.
ezdazuzena 2016年

8
不幸的是,如果值包含逗号,则即使使用引号将其分割。

107

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

sudo apt-get install csvtool

然后运行:

csvtool readable filename | view -

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


2
对于那些不在Debian发行版中的人来说,该工具似乎起源于这里:docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz 不幸的是,“主页”链接已死,我没有找不到一种轻松下载整个档案的简便方法。
cincodenada 2014年

9
该工具无法处理100Mb +的文件
PedroSena 2014年

6
该工具可从ocaml-csv包中base为我Centos7
布莱斯Guinta

72

看看csvkit。它提供了一组遵循UNIX哲学的工具(这意味着它们小巧,简单,用途单一,并且可以组合使用)。

以下是一个示例,该示例从免费的Maxmind世界城市数据库中提取了德国人口最多的十个城市,并以控制台可读的格式显示了结果:

$ 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编写的。


1
在我的MAC上效果很好。对于读取大文件非常有用。
詹姆士·林

4
我喜欢Csvkit。csvlook <文件名.csv> | 少-S
Sandeep

5
要获取csvkit,您可以点安装它:pip install csvkit。请享用!
gloriphobia

46

TabView的:轻量级蟒蛇诅咒命令行CSV文件查看器(以及其他表格Python的数据,如一个列表的列表)在这里上Github上

特征:

  • Python 2.7 +,3.x
  • Unicode支持
  • 类似电子表格的视图,可轻松可视化表格数据
  • 类似于Vim的导航(h,j,k,l,g(顶部),G(底部),12G转到第12行,m-标记,'-转到标记,等等。)
  • 切换永久标题行
  • 动态调整列宽和间隙的大小
  • 按任何列升序或降序排列。数值的“自然”顺序排序。
  • 全文搜索,n和p在搜索结果之间循环
  • “输入”以查看完整的单元格内容
  • 将单元格内容拖到剪贴板
  • F1还是?用于键绑定
  • 还可以从python命令行使用可视化任何表格数据(例如列表列表)

1
很棒的工具。打开了一个使csvtool和openoffice崩溃的巨大文件。也非常快。
莱昂纳多

成功在Windows上执行“ pip install tabview”后,如何启动该程序?我可以在Linux上成功使用'tabview file.csv',但是Windows似乎无法正常工作。谢谢!
克里斯·克里斯(Chris

我认为curses模块在Windows上不可用。抱歉! 可能有第三方模块可用,但我尚未为Windows做任何开发。
Scott Hansen

谢谢你的解释!毕竟,这是一个很棒的工具!
克里斯(Chris

1
@CiroSantilli乌坎事件2016六四事件法轮功,很遗憾尚未。我希望很快能在tabview中花些时间...这里已经休眠了一段时间了。:(
Scott Hansen


22

可以全局安装nodejs包tecfu / tty-table来做到这一点:

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

tecfu / tty-table

它还可以处理流。

有关更多信息,请参见此处的终端使用文档


1
如果您不赞成,请留下原因。该软件包可以正常工作。
user3751385

9
nodejs是一个Web服务器平台。您不建议别人用链锯切面包。
最大

23
节点是具有CLI绑定的通用脚本系统,它与使用perl单行代码或CPAN提供的功能有什么不同?
拉切特

我真的很喜欢这个选项,但是当我将它减少到更少时,它看起来并不正确。您知道是否需要一些额外的东西才能使其工作量减少?
plafratt

如果文件包含许多列(特别是超出终端屏幕的水平宽度可以容纳的范围)并且此后未正确对齐,则此包会中断。
6

10

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


9

我的FOSS项目CSVfix可让您以“ ASCII艺术”表格格式显示CSV文件。


正是我想要的。我将不得不尝试为OS X编译它。(您可能会知道一些补丁,谁知道...)
Benjamin Oakes,2009年

我非常欢迎他们。在FOSS项目中有些令人沮丧的方面之一是实际上很少有人贡献代码。当然,我和下一个人一样感到内。

为什么您的CSVfix项目不允许回购浏览?使其他人更难以看到该代码不会使您更有可能获得捐款,不是吗?
Dirk Eddelbuettel 2009年

1
恐怕我完全懒惰。另外,提供邮政编码的邮政编码意味着任何人都可以获取它-如果我仅提供回购访问权限,则人们将不得不安装SVM或Hg。如果我开始收到补丁,我会重新考虑。

上一次提交时间为2015‑02‑28
鲍里斯(Boris)

8

Ofri的答案为您提供了所需的一切。但是..如果您不想记住命令,可以将其添加到〜/ .bashrc(或等效文件)中:

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

这与Ofri的答案完全相同,除了我已经将其包装在shell函数中并且正在使用该less -S选项来停止换行(makes的less行为更像是office / oocalc)。

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

csview <filename>


5
这不处理引号中的逗号。

7

我使用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
}

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



3

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

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

2
那也是我的初衷。但是您必须插入足够的制表符以匹配列的最长值...开始变得有点复杂,我认为“其他人一定已经这样做了”。
本杰明·奥克斯

2
您还忽略了以下事实:逗号可能会被引用,因此不会被分隔符。(除其他事项外)
Ariel Allon '18


2

我写了这个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


2

使用TxtSushi,您可以执行以下操作:

csvtopretty filename.csv | less -S

由于不是一站式安装过程,因此表示不满。我没有时间编译此:(。如果您可以提供一个很棒的软件包
。– masterxilo

@masterxilo并不是拒绝投票的正当理由。今天,许多软件包都需要几个步骤来安装。另外,安装它可能比编写注释要快。
Yuval Meshorer


2

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

[sudo -H] pip3 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 ,

如果数据之间用逗号分隔,则也可以使用。最重要的是,它保留了定界符,因此您也可以在不牺牲[Markdown,CSV,LaTeX]语法的情况下使用它来定型ASCII表。


Collecting tablify Could not find a version that satisfies the requirement tablify (from versions: ) No matching distribution found for tablify
masterxilo

@masterxilo我已将其重命名为tablign。在说明中固定。
NicoSchlömer'18

1
完美,就是可行。
masterxilo

0

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

viewtab filename.csv

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

脚本及其安装方法如下:

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


0

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

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

csv2ascii.py [options] csv-file-path

将csv文件转换csv-file-path为ascii格式,并在stdout上返回结果。如果csv-file-path='-',则从标准输入中读取。

选项:

  -h,--help显示此帮助消息并退出
  -w WIDTH,--width = WIDTH
                        ASCII输出宽度
  -c栏,--columns =栏
                        仅显示此列数
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.