awk '{print $12}' | awk -F "ms" '{sum+=$1}END{printf "avg: %f, total: %d\n", sum/NR, NR}' 啥意思

简介: awk '{print $12}' | awk -F "ms" '{sum+=$1}END{printf "avg: %f, total: %d\n", sum/NR, NR}' 啥意思

这条命令组合了两个awk命令,用于处理文本数据。我会为你逐步解释这条命令的含义。


第一个 awk 命令:


bash复制代码
 awk '{print $12}'


这个命令会读取输入(可能是来自文件、管道或其他命令的输出),然后打印每一行的第12个字段(默认情况下,字段是由空白字符分隔的,如空格或制表符)。


管道 |:


管道操作符 | 用于将一个命令的输出作为另一个命令的输入。在这里,第一个awk命令的输出(即每一行的第12个字段)被传递给第二个awk命令。

第二个 awk 命令:


bash复制代码
 awk -F "ms" '{sum+=$1}END{printf "avg: %f, total: %d\n", sum/NR, NR}'


-F "ms":这个选项告诉awk使用"ms"作为字段分隔符。因此,它会将第一个awk命令输出的每一行中"ms"前后的内容视为不同的字段。

{sum+=$1}:对于每一行输入(即第一个awk命令输出的每一行),这个操作会将第一个字段(由"ms"分隔的)加到sum变量上。

END{printf "avg: %f, total: %d\n", sum/NR, NR}:当所有行都被处理完后,这个END块会被执行。它首先计算平均值(sum/NR,其中NR是已处理的记录数,即行数),然后打印平均值和总行数。


综上所述,这条命令的作用是:

从输入中取出每一行的第12个字段。

将这些字段(假设它们包含"ms")按"ms"拆分,并取拆分后的第一个部分(即"ms"前的部分)。

计算这些部分的总和,并打印它们的平均值和总数量。


例如,如果输入是:


复制代码
 ... some data ... 123ms ...  
 
 ... some data ... 456ms ...  
 
 ... some data ... 789ms ...

那么第一个awk命令会输出:


复制代码
 123ms  
 
 456ms  
 
 789ms



然后第二个awk命令会计算这些值的和(123+456+789),并打印平均值和总数。


相关文章
|
4月前
|
Perl
awk的BEGIN和END块
awk的BEGIN和END块
105 3
|
调度 索引
NR PUCCH(一) PUCCH format 0/1
NR中PUCCH物理信道用来发送上行控制信息Uplink Control Information(UCI),当然UCI也可以在PUSCH上发送。UCI 内容包括:CSI,HARQ ACK/NACK ,SR 及上述三者的组合信息。
|
SQL 关系型数据库 MySQL
|
SQL Oracle 关系型数据库
count函数
count函数
128 0
|
存储 SQL 缓存
count(*)那么慢能用吗,该怎么办呢?
大家好前面我们大概了解了为什么delete from表名,表的大小还是没有变小!以及数据删除流程,数据页空洞,online和inplace。重建表的两种实现方式。今天介绍一下为什么count(*)那么慢。
count(*)那么慢能用吗,该怎么办呢?
|
SQL 关系型数据库 MySQL
count(*) VS count(X)
背景 在平时的工作中,有些同学对count的用法还是有疑惑的,为此我做个简单的总结和测试,希望对大家有帮助。 count(*)和count(X)是不等价的 表达式 含义 count(*) 返回总行数,包括空和非空值 count(expression) .
1858 0
|
容器
|
Oracle 关系型数据库 索引