有人知道Linux/OS X的命令行CSV查看器吗?我在考虑一些更少的东西,但以一种更可读的方式分隔列。(我可以用OpenOffice Calc或Excel打开它,但这对于我需要查看的数据来说太强大了。)有水平和垂直滚动会很棒。


当前回答

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

其他回答

如果你是一个vimmer,使用CSV插件,它非常漂亮:

.

我为这些(和其他)目的创建了一个表。安装与

pip install tablign

and

$ 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]语法。

安装csvtool(在Ubuntu上)

sudo apt-get install csvtool

然后运行:

csvtool readable filename | view -

这将使它在只读的vim实例中非常漂亮,即使您有一些具有非常长的值的单元格。

这里有一个(可能太)简单的选择:

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

我用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
}

对我来说,它工作得更好的原因是它能更好地处理宽列。