命令行CSV查看器?

Ben*_*kes 290 linux csv macos command-line

有人知道Linux/OS X的命令行CSV查看器吗?我正在考虑类似less但是以更易读的方式将列空间化.(我可以用OpenOffice Calc或Excel打开它,但是这样做太过于无法仅仅按照我的需要查看数据.)水平和垂直滚动会很棒.

小智 408

你也可以用这个:

column -s, -t < somefile.csv | less -#2 -N -S
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

请注意,,,for 的替换, ,是两次.如果你只做了一次,那么自从第二个逗号已经匹配后1,,,4就会变成这样1, ,,4.

  • "Debian GNU/Linux"版本的列具有'-n'选项:"默认情况下,column命令会在使用-t选项时将多个相邻分隔符合并为单个分隔符;此选项会禁用该行为.此选项为Debian GNU/Linux扩展." (21认同)
  • 不幸的是,如果某个值包含逗号,即使它被引用,它也会被拆分. (5认同)
  • 如果您的列值(引用)中包含逗号,则似乎会中断.知道如何解决这个问题吗? (4认同)
  • 来自`man column`:` - n默认情况下,当使用-t选项时,column命令会将多个相邻的分隔符合并为一个分隔符; 此选项禁用该行为.这个选项是Debian GNU/Linux扩展 (3认同)
  • 我真的很喜欢这个选项 - 了解`column`真是太好了.我最终把它变成了一个简短的shell脚本(大部分是样板文件"我该如何使用它?"和错误检查代码).https://github.com/benjaminoakes/utilities/blob/master/view-csv (2认同)
  • @ProQ 你应该使用 `column -s; -t` 而不是 `column -s, -t`。 (2认同)

小智 95

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

sudo apt-get install csvtool
Run Code Online (Sandbox Code Playgroud)

然后运行:

csvtool readable filename | view -
Run Code Online (Sandbox Code Playgroud)

即使你有一些具有很长值的单元格,这也会使它在一个只读的vim实例中很漂亮.

  • 该工具无法处理100Mb +的文件 (7认同)
  • 这个工具可以在Centos7中的`base`中的`ocaml-csv`包中找到 (4认同)
  • 对于那些不在基于 Debian 的发行版上的人,这个工具似乎来自这里:http://docs.camlcity.org/docs/godisrc/ocaml-csv-1.1.6.tar.gz 不幸的是,“主页”链接已死,而且我没有看到一种简单的方法可以一次性下载整个档案。 (3认同)

Kai*_*nad 65

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

这是一个从免费的Maxmind World Cities数据库中提取德国人口最多的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      |
-----------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

Csvkit是独立于平台的,因为它是用Python编写的.

  • 要获得csvkit,你可以直接pip安装它:`pip install csvkit`.请享用! (5认同)
  • 我喜欢Csvkit.csvlook <filename.csv> | 少-S (3认同)

Sco*_*sen 43

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

特征:

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

  • TabView 现在推荐 VisiData,它只是一个出色的 CSV 文件交互式查看器。https://jsvine.github.io/intro-to-visidata/ (2认同)

P. *_*ore 30

如果你是一个vimmer,请使用CSV插件,这是美丽的.


use*_*385 21

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

apt-get install nodejs
npm i -g tty-table
cat data.csv | tty-table
Run Code Online (Sandbox Code Playgroud)

tecfu/TTY表

它也可以处理流.

有关详细信息,请参阅此处的终端使用文档.

  • node是一个带有CLI绑定的通用脚本系统,与使用perl单行或CPAN的东西有什么不同? (22认同)
  • nodejs是一个Web服务器平台.你不应该建议有人用电锯切面包. (8认同)
  • 如果您投反对票,请留下理由。这个包可以工作并且运行良好。 (2认同)

小智 10

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


sma*_*mic 9

xsv不仅仅是一个观众.我推荐它用于命令行上的大多数CSV任务,尤其是在处理大型数据集时.

  • 以铁锈为主。与 ripgrep 是同一作者。很酷。 (3认同)

pis*_*lis 8

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

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

这与Ofri的答案完全相同,除了我将它包装在一个shell函数中并使用less -S选项来停止换行(使得less行为更像办公室/ oocalc).

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

csview <filename>

  • 这不会处理引号中的逗号. (5认同)

Tom*_*iss 6

我很长一段时间都使用了pisswillis的答案.

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

但结合我在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
}
Run Code Online (Sandbox Code Playgroud)

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


Nik*_*ris 6

另一种多功能 CSV(不仅仅是)操作工具:Miller。从它自己的描述来看,它类似于对名称索引数据(例如 CSV、TSV 和表格 JSON)进行 awk、sed、cut、join 和 sort。(链接到 github 存储库:https://github.com/johnkerl/miller


Ofr*_*viv 5

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

sed "s/,/\t/g" filename.csv | less
Run Code Online (Sandbox Code Playgroud)

  • 这也是我的第一个倾向。但是你必须插入足够多的标签来匹配你的列的最长值......开始变得有点复杂,我想“其他人肯定已经这样做了。” (2认同)
  • 您还忽略了逗号可能被引用而不是分隔符的事实。(除其他外) (2认同)

小智 5

tbllessTabulator包中包含 unixcolumn命令,并且还对齐数字列。