关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。 3年前关闭。我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。我们不允许提出有关书籍、工具、软件库等建议的问题。您可以编辑问题,以便可以用事实和引用来回答它。改进这个问题
有人知道 Linux/OS X 的命令行 CSV 查看器吗?我正在考虑类似 less
的东西,但它以更易读的方式分隔列。 (我可以使用 OpenOffice Calc 或 Excel 打开它,但是对于像我需要的那样查看数据来说,这太强大了。)水平和垂直滚动会很棒。
你也可以使用这个:
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
,因为第二个逗号已经匹配。
您可以通过以下方式安装 csvtool
(在 Ubuntu 上)
sudo apt-get install csvtool
然后运行:
csvtool readable filename | view -
这将使它在只读 vim 实例中变得漂亮漂亮,即使您有一些具有非常长的值的单元格。
base
中的 ocaml-csv
包获得
看看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 编写的。
pip install csvkit
。享受!
brew install csvkit
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 命令行来可视化任何表格数据(例如列表列表)
可以全局安装 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。
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>
我使用了 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
}
它对我来说效果更好的原因是它可以更好地处理宽列。
又一个多功能 CSV(不仅是)操作工具:Miller。从它自己的描述来看,它类似于 awk、sed、cut、join 和 sort 用于名称索引数据,例如 CSV、TSV 和表格 JSON。 (链接到 github 存储库:https://github.com/johnkerl/miller)
mlr --icsv --opprint --barred --right cat YOUR_FILE.csv
(将 --icsv
替换为 --itsv
如果您的文件是 TSV)。
这是一个(可能也是)简单的选项:
sed "s/,/\t/g" filename.csv | less
Tabulator 包中的 tblless
包装了 unix column
命令,并且还对齐数字列。
mlr
) 肯定做得更好。
我为这些(和其他)目的创建了 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
tablign
。已在说明中修复。
我写了这个 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
使用 TxtSushi 您可以:
csvtopretty filename.csv | less -S
Tabview 真的很不错。使用 200+MB 的文件显示得很好,这些文件在 LibreOffice 和 gvim 中的 csv 插件中存在问题。
Anaconda 版本可在此处获得:https://anaconda.org/bioconda/tabview
为此,我在 Groovy 中编写了一个脚本 viewtab 。你像这样调用它:
viewtab filename.csv
它基本上是一个超轻量级的电子表格,可以从命令行调用,处理 CSV 和制表符分隔的文件,可以读取 Excel 和 Numbers 阻塞的非常大的文件,而且速度非常快。它不是纯文本意义上的命令行,但它独立于平台,可能适合许多寻求解决方案的人的账单,以解决在命令行环境中工作时快速检查许多或大型 CSV 文件的问题.
此处描述了该脚本及其安装方法:
http://bayesianconspiracy.blogspot.com/2012/06/quick-csvtab-file-viewer.html
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
不定期副业成功案例分享
column
。我最终把它做成了一个简短的 shell 脚本(大部分是样板“我如何使用它?”和错误检查代码)。 github.com/benjaminoakes/utilities/blob/master/view-csvman 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.