viewer da janela de terminal para arquivos delimitados por tabulação no * nix?

5

Eu trabalho com muitos arquivos de dados delimitados por tabulação, com colunas variadas de tamanho incerto.

Normalmente, a maneira como as pessoas visualizam esses arquivos é removê-los do servidor para sua máquina Windows ou Mac e, em seguida, abri-los no Excel. Isto é certamente cheio de recursos, permitindo filtragem e outras opções agradáveis. Mas às vezes, você só quer ver algo rapidamente na linha de comando.

Eu escrevi um utilitário bare-bones para exibir as primeiras <n> linhas de um arquivo da seguinte forma:

--- linha 1 ---
1: {header-1} 2: {header-2} 3: ...

--- linha 2 ---
1: {data-1} 2: {data-2} 3: ...

Isto é, obviamente, muito ruim, mas é suficiente para canalizar através do grep, ou descobrir quais colunas de cabeçalho usar "cut -f".

Existe um visualizador baseado em * nix para uma sessão de terminal que exibirá linhas e colunas de um arquivo delimitado por tabulação e permitirá que você mova a janela de visualização sobre o arquivo, ou veja os dados?

Eu não quero escrever isso sozinho; em vez disso, eu criaria um reformatador que substituiria as guias por espaços para preenchimento, de modo que eu pudesse abrir o arquivo no emacs e ver as colunas alinhadas. Mas se já existe uma ferramenta para fazer algo assim, seria ótimo!

(Ou, eu poderia apenas viver com o Excel.)

    
por Michael H. 11.05.2010 / 22:16

5 respostas

7

Existe uma planilha em modo texto em Unix chamada sc que pode funcionar para o seu uso. Você provavelmente precisará passar o arquivo através de psc para convertê-lo para o formato de arquivo que sc usa.

    
por 12.05.2010 / 00:49
12

Isso funciona para produzir uma versão impressa bonita de um arquivo delimitado por tabulações

column -t -s $'\t' list-of-entries.txt
    
por 20.12.2012 / 02:37
8

Abra o arquivo no vim e defina a parada de tabulação para algo alto, para que as colunas fiquem alinhadas. Se você não está familiarizado com o vim, primeiro inicie:

vim some_file.csv

Em seguida, defina a parada de tabulação para algum valor alto, para que as colunas sejam alinhadas. Tipo:

:set tabstop=20

Se as linhas ficarem muito longas, você também deve desativar a disposição. Assim, você pode rolar para os lados em vez de envolver o texto:

:set nowrap

Movendo-se: existem várias maneiras, mas as mais simples, como setas e pgup / pgdown / home / end, funcionam. Alguns outros comandos de movimento úteis:

CTRL+U: move half screen up
CTRL+D: move half screen down
gg: move to top
G: move to bottom

Você pode pesquisar texto da mesma maneira que faria no homem:

/regular_expression (search forward)
?regular_expression (search backward)

Em seguida, digite "n" para encontrar a próxima correspondência e "N" para encontrar a anterior.

Você também pode navegar usando o mouse se o seu terminal suportar, e você digita:

:set mouse=a

Editar: esqueci que você pode sair com:

:q (if you haven't changed the text)
:wq (to save it before quitting)
:q! (to abandon changes)
    
por 11.05.2010 / 22:32
6

Existe outra solução, que envolve um script. Salve este script para, por exemplo, tab.pl .

#!/usr/bin/perl

use strict;

my @lines;
# first read the file into a list of lists
while (<>)
{
    chomp; # remove the newline from the end of the line
    my @fields = split("\t");
    push @lines, \@fields;
}
my @lengths;
# calculate the maximum lengths of each field
foreach (@lines)
{
    for (my $i = 0; $i < scalar @$_; $i++)
    {
        $lengths[$i] = $lengths[$i] < length $$_[$i] ? length $$_[$i] : $lengths[$i];
    }
}
# now print the text aligned
foreach (@lines)
{
    for (my $i = 0; $i < scalar @$_; $i++)
    {
        print $$_[$i], " " x ($lengths[$i] - length ($$_[$i]) + 1);
    }
    print "\n";
}

Em seguida, basta digitar:

perl tab.pl some_file.csv | less

Ou salve o resultado em um arquivo e abra-o com seu editor de texto favorito:

perl tab.pl some_file.csv > result.txt
    
por 12.05.2010 / 09:53
1

pr permite expandir as guias para um determinado número de espaços com -e . Não se esqueça de passar -t -T para que não realmente formate a página inteira para impressão.

    
por 11.05.2010 / 22:29