命令行CSV查看器?

任何人都知道Linux / OS X的命令行CSV查看器? 我正在想的东西less但是以更可读的方式将列间隔开。 (如果用OpenOffice Calc或Excel打开它,我会好起来的,但仅仅根据需要查看数据的方式太过于强大了。)横向和纵向滚动会很好。

你也可以使用这个:

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

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

注意:每当你有空的字段,你需要在其中放置某种占位符,否则该列将被合并到以下列。 以下示例演示如何使用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 

请注意,replace,, for , ,是做两次。 如果只做一次, 1,,,4将变成1,,,4 1, ,,4因为第二个逗号已经匹配了。

你可以通过安装csvtool (在Ubuntu上)

 sudo apt-get install csvtool 

然后运行:

 csvtool readable filename | view - 

这将使它在一个只读的vim实例中变得更加美好,即使你有一些非常长的值的单元格。

看看csvkit 。 它提供了一套坚持UNIX哲学的工具(意思是它们很小,简单,单一目的,可以组合)。

这里有一个例子,从免费的Maxmind World Cities数据库中提取德国十个人口最多的城市,并以控制台可读的格式显示结果:

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

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

特征:

  • Python 2.7+,3.x
  • Unicode支持
  • 类似于电子表格的视图可以方便地查看表格数据
  • 类似Vim的导航(h,j,k,l,g(上),G(下),12G转到12行,m-mark,'goto mark等)
  • 切换持久标题行
  • dynamic调整列宽和间隔
  • 按任意列升序或降序排列。 “自然”顺序sorting的数值。
  • 全文search,n和p在search结果之间循环
  • input'查看完整的单元格内容
  • 将单元格内容翻转到剪贴板
  • F1还是? 用于键盘绑定
  • 也可以使用python命令行来显示任何表格数据(例如list-of-list)

如果你是一个微软,使用CSV插件 ,这是美丽的 。

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

Ofri的回答给了你所要求的一切。 但是..如果你不想记住这个命令,你可以把它添加到你的〜/ .bashrc(或者等效的)中:

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

这和Ofri的答案完全一样,只是我把它包装在shell函数中,并且使用less -S选项来停止行的包装(使行为更像Office / oocalc)。

打开一个新的shell(或者在你当前的shell中inputsource ~/.bashrc ),然后使用:

csview <filename>

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

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

tecfu / TTY表

它也可以处理stream。

有关更多信息,请参阅此处的terminal使用的文档 。

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

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

但是,然后结合我在http://chrisjean.com/2011/06/17/view-csv-data-from-the-command-linefind的一些代码,这对我来说更好:;

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

它对我更好的原因是,它更好地处理宽列。

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

使用TxtSushi你可以做到:

 csvtopretty filename.csv | less -S 

xsv不仅仅是一个观众。 我推荐它在命令行中处理大多数CSV任务,特别是在处理大型数据集时。

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

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

我写了这个csv_view.sh来从命令行格式化CSVs,它读取整个文件来找出每个列的最佳宽度(要求perl,假定在字段中没有逗号,也使用较less):

 #!/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 

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

 viewtab filename.csv 

它基本上是一个超级轻量级​​的电子表格,可以从命令行调用,处理CSV和制表符分隔的文件,可以读取Excel和数字电脑窒息的非常大的文件,而且速度非常快。 从纯文本的angular度来看,这不是命令行,而是独立于平台的,可能适合很多人寻找解决scheme,以解决在命令行环境中快速检查大量或大型CSV文件的问题。

脚本以及如何安装它在这里描述:

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

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

只需下载并放置在您的path。 用法就像

 csv2ascii.py [options] csv-file-path 

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

选项:

   -h,--help显示此帮助信息并退出
   -w WIDTH,--width = WIDTH
                         ascii输出的宽度
   -c COLUMNS,--columns = COLUMNS
                        只显示这个列数

另一个多function的CSV(而不仅仅是)操纵工具: 米勒 。 从它自己的描述来看,它就像awk,sed,cut,join和sorting等名称索引数据,如CSV,TSV和表格JSON。 (链接到github存储库: https : //github.com/johnkerl/miller )