regex - 在 perl 中解析字符串并执行操作
问题描述
我正在尝试解析 traceroute 字符串并获取服务器延迟。我已经设法做到了,但输出包括延迟和“毫秒”。我如何摆脱“毫秒”,是否可以平均三个延迟?
#!/usr/bin/perl
use strict;
use warnings;
my $str = " 1 sgp-1.valve.net (103.28.54.1) 1.030 ms 1.040 ms 1.212 ms";
my ($a, $b, $delaya, $delayb, $delayc) = split / /, $str;
print "$delaya\n";
print "$delayb\n";
print "$delayc\n";
回报:
1.030 ms
1.040 ms
1.212 ms
预期的:
1.030
1.040
1.212
解决方案
您可以使用正则表达式而不是拆分来执行此操作:
my $str = " 1 sgp-1.valve.net (103.28.54.1) 1.030 ms 1.040 ms 1.212 ms";
my ($delaya, $delayb, $delayc) =
($str =~ /([0-9.]+)\s+ms\s+([0-9.]+)\s+ms\s+([0-9.]+)\s+ms/);
print join "\n", $delaya, $delayb, $delayc, "\n";
产量:
1.030
1.040
1.212
正则表达式分解(下面的表达式重复 3 次):
( # beginning of a capturing group
[0-9.]+ # a sequence of numbers and dot (at least one character)
) # end of a capturing group
\s+ # at least one space
ms # string 'ms'
如果你想要平均值,那么:
my $str = " 1 sgp-1.valve.net (103.28.54.1) 1.030 ms 1.040 ms 1.212 ms";
my @delays = ($str =~ /([0-9.]+)\s+ms\s+([0-9.]+)\s+ms\s+([0-9.]+)\s+ms/);
my $total;
$total += $_ for @delays;
my $avg = $total/@delays;
print $avg, "\n";
产量:
1.094
推荐阅读
- flutter - 在 CupertinoTabBar 视图内外导航
- google-cloud-platform - 聚合时是否可以使堆栈驱动程序监视不填充时间序列间隙
- typescript - 为什么 Typescript 将 `object.hasOwnProperty("key")` 视为与 `"key" in object` 本质上不同
- sql - SQL - XML - 在子查询中创建多个具有相同名称的节点
- c++ - Wincrypto (CNG):无法使用任何 CNG 算法创建证书
- maps - 将像素转换为 Mapbox 地图上的坐标
- python - 用三种不同的条件将行逐一替换为与输入顺序相同的列表
- f# - F# 中的“任务”是什么?
- node.js - 根据条件加入 mongodb 集合
- angular - Angular 项目 ng build --prod 编译失败