首页 文章

命令行CSV查看器? [关闭]

提问于
浏览
267

有人知道Linux / OS X的命令行CSV查看器吗?我正在考虑像 less 这样的东西,但是以更易读的方式将列空出来 . (我的方式太过于过于强大,只能像我需要的那样查看数据 . )水平和垂直滚动会很棒 .

19 回答

  • 54

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

  • 1

    你也可以用这个:

    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 ,因为已经匹配了第二个逗号 .

  • 0

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

    sudo apt-get install csvtool
    

    然后运行:

    csvtool readable filename | view -
    

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

  • 6

    看看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编写的 .

  • 88

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

    特点:

    • Python 2.7,3.x

    • Unicode支持

    • 类似电子表格的视图,可以轻松查看表格数据

    • 类似Vim的导航(h,j,k,l,g(顶部),G(底部),12G转到第12行,m - 标记,' - 转到标记等)

    • 切换持久 Headers 行

    • 动态调整列宽和间隙的大小

    • 按任何列升序或降序排序 . 'Natural'对数值进行排序 .

    • 全文搜索,n和p在搜索结果之间循环

    • 'Enter'查看完整的单元格内容

    • 将单元格内容放入剪贴板

    • F1或?用于键绑定

    • 也可以使用python命令行来显示任何表格数据(例如列表列表)

  • 2

    如果你是一个游客,请使用CSV plugin,这是beautiful .

  • 36

    可以全局安装nodejs包tecfu/tty-table来执行以下操作:

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

    tecfu/tty-table

    它也可以处理流 .

    有关详细信息,请参阅docs for terminal usage here .

  • 3

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

  • 10

    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>

  • 2

    我很长一段时间都使用了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
    }
    

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

  • 1

    Tabulator包中的 tblless 包装了unix column 命令,并且还对齐数字列 .

  • 1

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

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

    我写了这个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
    
  • 369

    使用TxtSushi你可以这样做:

    csvtopretty filename.csv | less -S
    
  • 28

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

  • 4

    Tabview真的很棒 . 使用200 MB的文件显示很好的错误LibreOffice以及gvim中的csv插件 .

    Anaconda版本可在此处获取:https://anaconda.org/bioconda/tabview

  • 8

    我为这些(和其他)目的创建了tablign . 安装时

    [sudo -H] pip3 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]语法 .

  • 8

    为了这个目的,我在Groovy中编写了一个脚本viewtab . 你调用它像:

    viewtab filename.csv
    

    它基本上是一个超轻量级的电子表格,可以从命令行调用,处理CSV和制表符分隔的文件,可以读取Excel和Numbers扼流的非常大的文件,并且非常快 . 它不是纯文本意义上的命令行,而是独立于平台,可能适合许多寻求解决快速检查许多或大型CSV文件的人在命令行环境中工作的问题 .

    脚本及其安装方法如下所述:

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

  • 0

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

    只需下载并放入您的路径即可 . 用法就像

    csv2ascii.py [options] csv-file-path
    

    csv-file-path 处的csv文件转换为ascii表单,将结果返回到stdout . 如果 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
    

相关问题