使用awk和grep进行数据抽样比较

6 篇文章 0 订阅
6 篇文章 0 订阅

在进行数据抽样时,我们关注所抽取的数据在整体数据中分布的均匀性。

最简单的就是均匀抽取,即每隔几行选取一行。

比如,数据文件较大时,每隔10行或者每隔100行进行抽取。

 

假如数据文件还是“msg”

我们每隔10行取一行,有两种方法:

 

方法1:nl+grep

 

nl msg | grep -P '1\t' > target_file

 

方法2:awk

 

awk '{if(NR%10 ==1) print $0}' msg > target_file

 

两种方法都可以满足我们提出的需求。

但经过比较后发现,方法2效率略高于方法1,msg数据量:23380092

耗时分别为:13s、12s. (当然取决于具体的硬件)

 

而在前文中,我们统计包含某字符串的行数时,grep的效率要远远高于awk。

不难发现,是nl导致了效率的低下。nl把所有的记录都输出了一遍,效率和awk持平,而grep耗时1s左右(和上文中测试结果一致)。

 

因此在需要将文件内容都output一遍的场景下,优先选择awk方式。

 

而且,awk还有另一个好处,在面对每隔2行、3行...n行取一行的需求,实现起来更方便。

 

而nl+grep就比较纠结了,例如实现每隔一行取一行的需求:

 

nl+grep:

 

nl msg | grep -P '2\t|4\t|6\t|8\t|0\t'   > target_file

 

awk:

 

awk '{if(NR%2 ==0) print $0}' msg > target_file
在Linux系统中,使用`awk`结合`grep`工具可以处理文本数据并提取特定的信息,例如CPU使用率。通常,我们可以通过读取`/proc/stat`文件来获取CPU使用信息。下面是一个简单的例子,说明如何使用`awk`和`grep`来输出CPU的系统使用率。 首先,你需要查看`/proc/stat`文件中记录的CPU时间信息。这个文件包含多个以"cpu"开头的行,每行记录了不同部分的CPU时间统计数据。其中`cpu`行包含了系统总体的CPU使用情况。 以下是一个简单的脚本示例: ```bash #!/bin/bash # 获取当前系统的CPU使用率 CPU_IDLE=$(grep 'cpu ' /proc/stat | awk '{print $5}') sleep 1 # 等待1秒 CPU_IDLE_LATER=$(grep 'cpu ' /proc/stat | awk '{print $5}') # 计算CPU使用率 CPU_TOTAL=$(($CPU_IDLE_LATER - $CPU_IDLE)) IDLE_TOTAL=$(($CPU_TOTAL - ($CPU_TOTAL - $IDLE_TOTAL))) CPU_USAGE=$((100 - ($IDLE_TOTAL * 100 / $CPU_TOTAL))) echo "CPU System Usage: $CPU_USAGE%" ``` 这个脚本首先获取了系统空闲时间(第五个字段),然后等待一秒钟,再次获取空闲时间。通过比较两次读取的数据差异,计算出CPU的使用率。这里假设`cpu`行的第五个字段是系统空闲时间,其实实际的字段取决于你的Linux发行版。在某些系统中,可能需要获取不同的字段。 请注意,上述脚本仅作为参考,因为CPU的统计字段可能根据系统的不同而有所差异。另外,这个脚本计算的是CPU的空闲时间,而不是系统使用率。如果你需要计算CPU的用户模式使用率、系统模式使用率等,需要查看`/proc/stat`文件中相应字段的意义,并适当修改脚本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值