UNIX工具箱中是否有任何(基于文本的)绘图工具?


9

我想知道unix工具箱中是否有任何通用的绘图工具?
通过绘制,我的意思是简单的条形或在许多基于curses的实用程序中看到的东西。
通过Unix工具箱,我的意思是,您可以使用标准的Unix约定将数据传送到其中。

我需要计算日志文件中的某物(我正在监视的tail -F东西)并绘制事物的实时比率(例如百分比错误或警告)。

Answers:


9

您正在寻找gnuplot的选项terminal设置为dumb

这不是我的首选,因为我的所有机器都具有ROOT功能,但是却拥有一个可靠的无处不在的备用服务器。

CernlibPAW也可以执行ASCII输出,尽管您必须非常勇敢地实际使用它,因为它似乎假定您具有132列的扇形折叠终端。


... The development and support for CERNLIB has been discontinued. Libraries will be continued to be provided "as is",提醒?例如,使用Cernlib的PAW代替R Sweave Latex有什么好处?从未听说过这种通用工具吗?我在R Sweave Latex之前使用gnuplot,发现后者使用起来更加方便-所有内容都包含在一个文本文件中,包括图片。你可以用gnuplot做到吗?

@hhh您会注意到“ Cernlib的PAW 可以做到”的时态,尽管人们仍然使用它,因为那里有很多成熟的代码。
dmckee ---前主持人小猫,

很好,但是增加的部分是什么?"132 column fan-fold terminal", 它是什么?对于点矩阵打印机?这是一个非常古老的项目吗?抱歉,您的答案太模糊了,"[n]ot my first choice"使用gnuplot吗?需要我一些时间来了解您的意思和写作。为什么选择gnuplot?

PAW的ASCII输出模式最好描述为“笨拙”。当我使用cernlib时,它是X上的本机,可以直接写到我们使用的postscript或封装的postscript,但是,它的某些部分可以追溯到1960年代初编写的代码。假设似乎是您拥有一个硬拷贝终端;其中许多使用132字符宽的格式,并带有明暗带交替显示,以便于阅读。足够老的怪胎都能记住这些东西(直到1980年,您仍然偶尔看到它)。
dmckee ---前主持人小猫,

1
set term dumb绘制ascii
kev

3

您可以使用R,它可以为您生成一些非常漂亮的图形,并对数据进行大量统计分析。这篇博客文章向您展示了一种实现方法。

同样,您可以使用gnuplot查看此处此处


谢谢,但是我不想使用任何GUI,既不想编写代码也不想显示图表,我想完全在终端中完成。此外,我宁愿能够运行它而无需sudo(用于安装任何东西)。
阿里


thanx,我不知道,我需要尝试一下,尽管我从未使用过R,但是对于mp简单用例来说应该很容易。
阿里

1

"Generic plotting tools available in the unix toolbox"可能是每个基本的Un * x工具,您需要组合工具来创建事物。我喜欢将Latex,R和Sweave结合起来!这个词"logs"使问题有些悬而未决,但显然是有目的的,请注意这个词"generic"。因此,与使用AWK / SED / etc进行预处理无关,而仅与绘制文本文件中的内容有关。玩得开心!

在此处输入图片说明

$ 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 

$ 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}

现在,下一个难题是可访问性(假设op需要ASCII输出,而不仅仅是通用工具)。抱歉,我还没有答案,但是我将在下面的信息中列出以进行进一步的探索。

大声思考:选择诸如TIFF之类的光栅图像格式,然后仅打印第100列或类似的内容即可查看。抱歉,我只是猜测,但是我知道TIFF是用于所有归档目的的事实上的光栅图像格式-我尚不确切知道OCR引擎(例如Tesseract)如何处理它们,但是这里的问题很容易,因为您可以跳过图像预处理中的很多内容-因为我们确实知道R是如何生成它们的。有人知道怎么做?还是我在重新发明轮子?最简单的方法是,选择一个可生成ASCII铰链的工具,这对于a来说有点局限"generic"

有关

  1. 哪些工具可用于ASCII投资组合可视化?

仔细阅读问题(以及更明确的注释)。OP希望在终端中显示结果。
dmckee ---前主持人小猫,

@dmckee:是的,但是op还需要"generic"工具吗?现在这很难,因为我认为它可以推断出基于OCR的概率,不确定op是否意识到这一点。

我所说的“通用”是指不是针对特定用例而设计的多用途工具,诸如此类awksed非“特定”的东西。不好意思,很抱歉。基本上,我想在终端中制作非常简单的条形图。就这样。
阿里

@Ali:停止解释。您指挥,我们回答-最佳答案胜出。除“ ASCII输出”外,我的答案有效。您的问题很明确,但是目前我无法为您提供进一步帮助-不在乎别人有不同的看法,只是放松一下-某人迟早会解决这个问题。我也在寻找类似问题的解决方案,因此也许我们将……不确定是否必须深入研究OCR引擎来解决此问题,但我确实认为这个问题仍然存在"unsolved",将寻找这个问题……

1

您可以将数字输出通过管道传递到简单的perl代码段中。例如,这是一个测试程序(以bash格式),仅输出递增的数字:

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

假设我对从0到20的值范围感兴趣,并且终端宽度为80个字符,我将这样做:

[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 *****************************************************************************|

这样的事情几乎可以在任何Linux系统上运行,并且输出和参数很容易调整。与使用gnuplot之类的东西相比,开销很小。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.