Alguma ferramenta de plotagem (baseada em texto) na caixa de ferramentas unix?


9

Eu queria saber se existem ferramentas genéricas de plotagem disponíveis na caixa de ferramentas unix?
Ao plotar, quero dizer barras simples ou coisas que você vê em muitos utilitários baseados em maldições.
E por caixa de ferramentas unix, quero dizer coisas que você pode canalizar dados para elas usando convenções unix padrão.

Preciso contar algumas coisas nos arquivos de log (com os quais estou monitorando tail -Fou algo assim) e plotar proporções reais de coisas (como porcentagem de erros ou avisos).

Respostas:


9

Você está procurando gnuplot, com a opção terminaldefinida como dumb.

Não é minha primeira escolha, porque tenho ROOT em todas as minhas máquinas, mas um modo de espera confiável e onipresente.

A PAW do Cernlib também pode produzir saída ASCII, embora você precise ser bastante corajoso para usá-la, pois parece assumir que você possui um terminal de 132 colunas dobrável por ventilador.


... The development and support for CERNLIB has been discontinued. Libraries will be continued to be provided "as is"alertando? Qual é o benefício de usar a PAW do Cernlib em vez do R Sweave Latex, por exemplo? Nunca ouvi falar disso, ferramenta genérica ?! Eu usei o gnuplot antes do R Sweave Latex, acho o último muito mais conveniente de usar - tudo em um arquivo de texto, incluindo imagens. Você pode fazer isso com o gnuplot?

@hhh Você notará o tempo de "a PAW de Cernlib também poderia funcionar" , embora as pessoas ainda a usem porque existe uma grande quantidade de código maduro por aí.
dmckee --- gatinho ex-moderador

muito bem, mas para que serve a parte adicionada? "132 column fan-fold terminal", O que é isso? Para impressoras matriciais? Então esse é um projeto muito antigo ?! Desculpe, sua resposta está muito ofuscada pela idade, "[n]ot my first choice"com o gnuplot? Leva-me tempo para entender o que você está significando e escrevendo. Por que gnuplot?

O modo de saída ASCII para PAW foi melhor descrito como "desajeitado". Quando eu estava usando o cernlib, ele era nativo no X e podia escrever diretamente no postscript ou no postscript encapsulado, que é o que usamos, no entanto, partes dele podem rastrear suas raízes no código estabelecido no início dos anos 60. A suposição parece ter sido que você tem um terminal de cópia impressa ; muitos deles usavam um formato amplo de 132 caracteres com faixas claras e escuras alternadas para facilitar a leitura. Todos os geeks com idade suficiente serão capazes de se lembrar das coisas (você ainda as viu ocasionalmente em 1980).
dmckee --- ex-moderador gatinho

11
set term dumbplotar ascii
kev

3

Você pode usar R, que pode produzir alguns gráficos bastante agradáveis ​​e fazer muitas análises estatísticas em seus dados. Esta postagem do blog mostra uma maneira de fazer isso.

Da mesma forma, você pode usar o gnuplot, veja aqui e aqui


obrigado, mas não quero usar nenhuma GUI, nem para escrever o código nem para mostrar os gráficos, quero fazê-lo inteiramente no terminal. Além disso, eu preferiria executá-lo sem a necessidade de sudo (para instalação de qualquer coisa).
Ali

@ Ali: Veja a seguinte publicação no blog: r-bloggers.com/ascii-scatterplots-in-r
Sardathrion - contra abuso no SE

thanx, eu não tinha ideia, preciso tentar isso, embora nunca tenha usado R, mas deva ser fácil para casos de uso simples em mp.
Ali

1

"Generic plotting tools available in the unix toolbox"é provavelmente toda ferramenta Un * x básica, você precisa combinar ferramentas para criar coisas. Adoro combinar Latex, R e Sweave! O termo "logs"deixa a pergunta um pouco aberta, mas aparentemente por propósito, observe o termo "generic". Portanto, nada sobre pré-processamento com AWK / SED / etc e apenas sobre plotagem que vem em arquivos de texto. Diverta-se!

insira a descrição da imagem aqui

$ mkdir Pictures
$ R CMD Sweave paper.Rnw 
Writing to file paper.tex
Processing code chunks with options ...
 1 : term verbatim

You can now run (pdf)latex on 'paper.tex'
$ pdflatex paper.tex 3&>/dev/null

$ evince paper.pdf 

paper.tex

$ cat paper.tex

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{graphicx}
\usepackage[T1]{fontenc}    % intended quotes

\begin{document}
\sloppy

<<echo=FALSE>>=
png('./Pictures/examples.png')
x<-1:10
y<-10:1

par(mfrow=c(2,2))
                # Demand/Supply example
plot(x,y-2, type='l', ylab='Price', xlab="Quantity")
lines(y,x+2)
lines(x,x)

title(main="Examples by HHH for R Sweave Latex")

hist(rnorm(100))        # histogram example
plot(sin(1:1E3),cos(1:1E3)) # circle example
plot(sin(1:1E3),1:1E3)      # sin example
@
\includegraphics{./Pictures/examples.png}

\end{document}

Agora, o próximo quebra-cabeça é a acessibilidade (supondo que o op deseje saída ASCII, não apenas ferramenta genérica). Desculpe, ainda não tenho uma resposta, mas listarei abaixo as informações para uma exploração mais aprofundada.

Basta pensar em voz alta: escolha um formato de imagem rasterizada, como TIFF, e imprima cada coluna 100 ou algo assim para vê-lo. Desculpe por especular, mas sei que o TIFF é de fato um formato de imagem rasterizada para todos os tipos de fins de arquivamento - ainda não sei exatamente como os mecanismos de OCR, como o Tesseract, lidam com eles, mas aqui o problema é fácil porque você pode pule muitas coisas no pré-processamento da imagem - porque sabemos como o R as gera. Alguém teve uma idéia de como fazer isso? Ou estou reinventando a roda? No mais simples, escolha uma ferramenta que gere hings para ASCII, um pouco restritivo "generic".

Relacionado

  1. Quais ferramentas para visualização do portfólio ASCII?

Leia a pergunta com atenção (e os comentários em que ela se torna mais explícita). O OP deseja exibir resultados no terminal .
dmckee --- gatinho ex-moderador

@ dmckee: sim, mas op requer também "generic"ferramenta ?! Agora, essa é difícil porque acho que infere probs baseados em OCR, não tenho certeza se o op realiza isso.

Por "genérico", quero dizer, ferramentas multiuso, coisas como awke sedque não são "específicas", não projetadas para um caso de uso específico. Desculpe se é confuso. basicamente, eu quero fazer gráficos de barras muito simples no terminal. Isso é tudo.
Ali

@ Ali: pare de explicar. Você comanda, nós respondemos - e a melhor resposta vence. Minha resposta funciona, exceto "Saída ASCII". Sua pergunta é clara, mas, neste momento, não posso ajudá-lo mais - não se importe com pessoas com opiniões diferentes, apenas relaxe - alguém resolverá isso mais cedo ou mais tarde. Estou procurando uma solução para um problema semelhante da mesma forma, então talvez ... não tenhamos certeza se precisamos cavar nos mecanismos de OCR para resolver isso, mas acho que essa pergunta ainda é "unsolved", procurará por isso ...

1

Você pode apenas canalizar sua saída numérica para um snippet perl simples. Por exemplo, aqui está um programa de teste (no bash) que apenas gera números crescentes:

(i=0; while true; do sleep 1; echo $i; i=$(( $i + 3 )); done)

Supondo que eu esteja interessado em um intervalo de valores de 0 a 20 e que possua um terminal com 80 caracteres de largura, farei:

[above snippet] | perl -ne '$min=0; $max=20; $w=80; use POSIX; $d=ceil(log($max)/log(10)); $w-=$d; $v=$_<$min?0:$_>$max?$max:$_; $s=$w*$v/($max-$min); $bar=join("", ("*")x$s); $bar=~s/.$/|/ if $v==$max; print sprintf("%${d}d ",$_)."$bar\n";'

 0 
 3 ***********
 6 ***********************
 9 ***********************************
12 **********************************************
15 **********************************************************
18 **********************************************************************
21 *****************************************************************************|
24 *****************************************************************************|

Algo assim funcionará em praticamente qualquer sistema Linux, e é fácil ajustar a saída e os parâmetros. A sobrecarga em comparação com o uso de algo como o gnuplot é minúscula.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.