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

9

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

Preciso contar algumas coisas nos arquivos de log (que estou monitorando com tail -F ou algo assim) e plotar as proporções ao vivo das coisas (como erros de porcentagem ou avisos).

    
por Ali 16.12.2011 / 16:07

4 respostas

9

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

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

Cernlib 's PAW também pode fazer a saída ASCII, embora você tenha que ser bastante corajoso para realmente usá-lo, pois parece supor que você tem um terminal de dobra em coluna de 132 colunas.

    
por 16.12.2011 / 17:25
3

Você pode usar R , que pode produzir gráficos bastante agradáveis e fazer muito de análise estatística em seus dados. Esta postagem no blog mostra uma maneira de fazer isso.

Similarmente, você pode usar o gnuplot veja aqui e aqui

    
por 16.12.2011 / 16:22
1

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

$mkdirPictures$RCMDSweavepaper.RnwWritingtofilepaper.texProcessingcodechunkswithoptions...1:termverbatimYoucannowrun(pdf)latexon'paper.tex'$pdflatexpaper.tex3&>/dev/null$evincepaper.pdf

paper.tex

$catpaper.tex\documentclass{article}\usepackage[utf8]{inputenc}\usepackage{graphicx}\usepackage[T1]{fontenc}%intendedquotes\begin{document}\sloppy<<echo=FALSE>>=png('./Pictures/examples.png')x<-1:10y<-10:1par(mfrow=c(2,2))#Demand/Supplyexampleplot(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 é acessibilidade (supondo que o op deseje saída ASCII, não apenas ferramenta genérica). Desculpe eu ainda não tenho uma resposta para isso, mas vou listar informações abaixo para uma maior exploração.

Apenas pensando em voz alta: escolha um formato de imagem raster como TIFF e, em seguida, imprima apenas a 100ª coluna ou s / coisa para visualizá-la. Desculpe apenas especular, mas sei que o TIFF é um formato de imagem raster para todos os tipos 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 R as gera. Alguém tem uma ideia de como isso? Ou eu estou reinventando a roda? No mais simples, escolha uma ferramenta que gere hings para ASCII, um pouco restritiva para ser "generic" .

Relacionado

  1. Quais ferramentas para visualização de portfólio ASCII?
por 18.12.2011 / 03:45
1

Você pode simplesmente enviar sua saída numérica para um fragmento de perl simples. Por exemplo, aqui está um programa de teste (no bash) que apenas exibe 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 eu tenho um terminal de 80 caracteres, eu 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 como isso funcionará em praticamente qualquer sistema Linux, e a saída e os parâmetros são fáceis de ajustar. A sobrecarga em comparação com o uso de algo como o gnuplot é minúscula.

    
por 14.07.2013 / 02:17