Linux终端上统计数据
1. 概述
在本教程中,我们将重点介绍用于打印文件中数字聚合静态信息的工具。我们将评估平均数、中位数、众数、标准差等统计数据。
2. 设置
让我们创建一个包含由换行符分隔的数字列表的sample.txt文件:
$ echo '1 2 3 4 5 6 7 8 9 10' |tr ' ' '\n' > sample.txt
在这里,我们使用echo 输出从 1 到 10 的所有数字,以空格分隔。接下来,我们将结果传送到tr 命令,该命令将所有空格转换为换行符。
我们可以使用cat 命令查看sample.txt文件的内容:
$ cat sample.txt
1
2
3
4
5
6
7
8
9
10
接下来,我们将评估这些数字的平均数、中位数、众数、平均数和标准差等统计数据。
3. 使用awk
awk 是一种功能强大的脚本语言,专为文本处理、提取和生成数据报告而设计。
awk不需要编译并允许我们使用逻辑运算符、变量、字符串函数和数字函数。
让我们打印sample.txt文件中数字的平均值:
$ awk '{a+=$1} END{print "mean = " a/NR}' sample.txt
5.5
在这里,我们创建了一个名为a的变量,然后将文件中的所有数字加起来放在第一个字段中。在awk 中,输入中的第一个字段表示为$1。之后,我们将变量a的值除以记录总数 *(NR)*并打印结果。
为了获得中位数,我们使用*gawk , awk的 GNU 表示。gawk具有标准awk*实用程序中不可用的额外命令。
首先,让我们安装gawk:
$ sudo apt install gawk
安装后,让我们得到中位数:
$ gawk -v max=100 '
function median(r,s) {
asort(s,t)
if (r%2) return t[(r+1)/2]
else return (t[r/2+1]+t[r/2])/2
}
{
count++
values[count]=$1
if (count >= max) {
print median(count,values); count=0
}
}
END {
print "median = " median(count,values)
}
' sample.txt
median = 5.5
在这里,我们使用*-v 标志将max的值设置为100*。换句话说,我们使用100的值作为限制器。
我们还定义了一个*get_median()*函数来计算数字并打印出中位数。
我们还可以获取sample.txt文件中数字的标准差:
$ awk '{total+=$1; totalsq+=$1*$1} END {print "stdev = " sqrt(totalsq/NR - (total/NR)**2)}' sample.txt
stdev = 2.87228
我们得到数字的总和和它们的平方和,然后用它们来计算标准差。
4. 使用ministat
ministat 是一种统计实用工具,用于计算输入文件或标准输入中数值数据的核心统计特性。
它是 FreeBSD 的一个工具,但也为流行的发行版(如 Debian 和 Ubuntu)打包。
在 Linux 上,我们可以使用包管理器安装ministat :
$ sudo apt install ministat
或者,我们可以下载 、构建和安装它。
安装完成后,让我们根据sample.txt文件打印统计数据:
$ cat sample.txt| awk '{print $1}' | ministat -w 70
x <stdin>
+--------------------------------------------------------------------------+
|x x x x x x x x x x|
| |________________________A___M___________________| |
+--------------------------------------------------------------------------+
N Min Max Median Avg Stddev
x 10 1 10 6 5.5 3.0276504
在这里,我们使用cat命令打印sample.txt文件中的数据。接下来,我们将结果通过管道传递给awk,它打印第一行数字。最后,我们将结果传送到ministat,它执行统计计算。
如果标准输出不是终端,我们使用*-w标志将输出宽度设置为70* 。
5. 使用perl
** perl代表实用提取和报告语言。它在打印基于通过文件或标准输入输入的数据的报告时非常有效。**它已经发展成为一种通用语言,广泛用于编写从快速一行到全面应用程序的程序。
让我们打印sample.txt文件中数字的聚合统计数据:
$ cat sample.txt | perl -e '
use List::Util qw(max min sum);
@r=();
while(<>){
$sqtotal+=$_*$_; push(@r,$_)
};
[[email protected]](/cdn_cgi/l/email_protection); $total=sum(@r); $average=$total/@r; $m_num=max(@r); $mm_num=min(@r);
$stdev=sqrt($sqtotal/$count-($total/$count)*($total/$count));
$middle_num=int @r/2; @srtd=sort @r;
if(@r%2){
$median=$srtd[$middle_num];
}
else{
$median=($srtd[$middle_num-1]+$srtd[$middle_num])/2;
};
print "records:$count\n sum:$total\n avg:$average\n std:$stdev\n med:$median\n max:$m_num min:$mm_num";'
records:10
sum:55
avg:5.5
std:2.87228132326901
med:4.5
max:10
min:1
在这里,我们使用*-e*标志来执行我们的 Perl 代码。以下是脚本某些部分的细分:
- 使用 List::Util qw(max min sum):这是一个使我们能够使用max、min和sum函数的模块。
- @r=():我们正在定义一个名为*@r*的数组变量并将其值设置为空白列表
- while(<>)… :这是一个 while 循环,它获取sample.txt文件中每个数字的平方和。我们还将文件中的每个数字推送到*@r* 数组变量。
然后,我们创建和评估代表记录数 ( $count )、总和 ( $total )、平均值 ( $average )、标准差 ( $stdev )、中位数 ( $median )、最大值 ( $m_num )的变量和最小值( $mm_num )。
6. 使用datamash
**GNU *datamash *是一个命令行实用程序,可对数据文件或标准输入执行文本、数字和统计操作。**它是可移植的,有助于自动化分析管道,而无需编写代码或短脚本。
让我们从本地包管理器安装datamash :
$ sudo apt install datamash
安装后,让我们根据sample.txt文件中的数字打印聚合统计数据:
$ cat sample.txt | datamash sum 1 mean 1 median 1 mode 1 sstdev 1
55 5.5 5.5 1 3.0276503540975
在这里,我们使用datamash打印总和、平均值、中位数、众数和样本标准差。
7. 使用st
st 是一个简单的命令行实用程序,用于显示来自标准输入或文件的数字统计信息。
要安装它,我们首先从它在 GitHub 上的存储库下载它:
$ git clone https://github.com/nferraz/st.git
然后,让我们导航到目录并使用perl命令生成构建文件:
$ cd st && perl Makefile.PL
Generating a Unix-style Makefile
Writing Makefile for App::St
Writing MYMETA.yml and MYMETA.json
最后,我们使用make命令来构建和安装st:
$ sudo make install
Manifying 1 pod document
Manifying 1 pod document
Appending installation info to /usr/local/lib/x86_64-linux-gnu/perl/5.30.0/perllocal.pod
安装后,我们可以导航回我们的工作目录以生成聚合统计数据:
$ st sample.txt
N min max sum mean stddev
10 1 10 55 5.5 3.02765
也可以使用一些可用选项来过滤结果:
$ st --sum sample.txt
55
8. 使用clistats
** clistats 是一个命令行实用程序,用于根据一组分隔的输入数字计算统计数据。
数字可以用逗号或制表符分隔。但是,默认分隔符是逗号。
我们可以传递来自文件、重定向管道或标准输入的输入。
要使用clistats,让我们首先从其存储库下载它:
$ git clone https://github.com/dpmcmlxxvi/clistats.git
接下来,我们可以导航到下载的目录并运行make 命令来构建clistats:
$ cd clistats && make
g++ -O2 src/clistats.cpp -o clistats
这会在目录中创建一个名为clistats的文件。我们将使用此文件生成报告。
最后,我们将sample.txt文件复制到clistats目录下,然后生成聚合统计数据:
$ ./clistats < sample.txt
#=================================================================
# Statistics
#=================================================================
# Dimension Count Minimum Mean Maximum Stdev
#-----------------------------------------------------------------
1 10 1.000000 5.500000 10.000000 2.872281