命令行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
它也可以处理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 )