有人知道Linux/OS X的命令行CSV查看器吗?我正在考虑类似less的东西,但它以一种更可读的方式分隔列。(我可以用OpenOffice Calc或Excel打开它,但这对于我需要的数据看来说太过强大了。)有水平和垂直滚动会很棒。
less
这里有一个(可能太)简单的选择:
sed "s/,/\t/g" filename.csv | less
csview() { local file="$1" sed "s/,/\t/g" "$file" | less -S }
这与Ofri的答案完全相同,除了我已经将它包装在shell函数中,并且正在使用less -S选项来停止行包装(使less的行为更像office/oocalc)。
less -S
打开一个新的shell(或在当前shell中键入source ~/.bashrc)并使用以下命令运行命令:
source ~/.bashrc
csview <filename>
你可以安装csvtool(在Ubuntu上)
csvtool
sudo apt-get install csvtool
然后运行:
csvtool readable filename | view -
这将使它在只读的vim实例中非常漂亮,即使您有一些具有非常长的值的单元格。
使用TxtSushi你可以做到:
csvtopretty filename.csv | less -S
我写了这个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
你也可以用这个:
column -s, -t < somefile.csv | less -#2 -N -S
column是一个标准的unix程序,非常方便——它可以找到每一列的适当宽度,并将文本显示为格式良好的表格。
column
注意:无论何时有空字段,都需要在其中放置某种占位符,否则该列将与后面的列合并。下面的例子演示了如何使用sed插入占位符:
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,因为第二个逗号已经匹配了。
,,
, ,
1,,,4
1, ,,4
如果你是一个vimmer,使用CSV插件,它非常漂亮:
。
看看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编写的。
为此,我在Groovy中编写了一个脚本viewtab。你可以这样调用它:
viewtab filename.csv
它基本上是一个超轻量级的电子表格,可以从命令行调用,处理CSV和制表符分离的文件,可以读取Excel和Numbers阻塞的非常大的文件,并且非常快。从纯文本的意义上讲,它不是命令行,但它是独立于平台的,可能适合许多人在命令行环境中寻找快速检查许多或大型CSV文件的解决方案。
脚本和如何安装它描述在这里:
http://bayesianconspiracy.blogspot.com/2012/06/quick-csvtab-file-viewer.html
Tabview:轻量级的python curses命令行CSV文件查看器(以及其他表格式python数据,如列表中的列表)位于Github
在python中有一个简短的命令行脚本:https://github.com/rgrp/csv2ascii/blob/master/csv2ascii.py
只需下载并放置在您的路径。用法就像
csv2ascii.py [options] csv-file-path
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
我用pisswillis的答案用了很长时间。
但随后结合了一些代码,我在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 }
对我来说,它工作得更好的原因是它能更好地处理宽列。
制表机包中的tblless包装了unix column命令,并对数值列进行对齐。
tblless
xsv不仅仅是一个查看器。我推荐它用于命令行上的大多数CSV任务,特别是在处理大型数据集时。
nodejs包tecfu / tty-table可以被全局安装来精确地做到这一点:
apt-get install nodejs npm i -g tty-table cat data.csv | tty-table
它还可以处理流。
有关更多信息,请参见这里是终端使用文档。
另一个多功能的CSV操作工具:米勒。从它自己的描述来看,它类似于名称索引数据(如CSV、TSV和表格JSON)的awk、sed、cut、join和sort。(链接到github仓库:https://github.com/johnkerl/miller)
我为这些(和其他)目的创建了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]语法。
Tabview真的很好。工作200+MB的文件,显示很好,这是与LibreOffice的bug,以及在gvim的csv插件。
Anaconda版本可以在这里找到:https://anaconda.org/bioconda/tabview