unix 工具箱中有(基于文本的)绘图工具吗?

unix 工具箱中有(基于文本的)绘图工具吗?

我想知道 unix 工具箱中是否有可用的通用绘图工具?
我所说的绘图是指简单的条形图或您在许多基于诅咒的实用程序中看到的东西。
我所说的 unix 工具箱是指您可以使用标准 unix 约定将数据通过管道传输到其中的东西。

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

答案1

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

不是我的第一选择,因为我有在我所有的机器上,但一个可靠的、无处不在的备用。

欧洲国家中心图书馆爪子也可以进行 ASCII 输出,尽管您必须非常勇敢地实际使用它,因为它似乎假设您有一个 132 列的扇形终端。

答案2

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

同样,您可以使用gnuplot这里这里

答案3

"Generic plotting tools available in the unix toolbox"可能是每个基本的 Un*x 工具,你需要组合工具来创建东西。我喜欢将 Latex、R 和 Sweave 结合起来!该术语"logs"使问题有点开放,但显然是有意为之,请注意术语"generic"。因此,无需使用 AWK/SED/等进行预处理,而只需在文本文件中进行绘图。玩得开心!

在此输入图像描述

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

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

只是大声思考:选择光栅图像格式(例如 TIFF),然后打印每第 100 列或类似的东西来查看它。抱歉,只是推测,但我知道 TIFF 是一种事实上的光栅图像格式,用于各种归档目的 - 我还不知道 OCR 引擎(例如 Tesseract)如何处理它们,但这里的问题很简单,因为你可以在图像预处理中跳过很多东西——因为我们确实知道 R 如何生成它们。有人知道如何做到这一点吗?还是我在重新发明轮子?最简单的是,选择一个可以生成 ASCII 格式的工具,这对"generic".

有关的

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

答案4

您只需将数字输出传送到一个简单的 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 之类的东西相比,开销是微乎其微的。

相关内容